elixir - 像 GPIO read forever 这样的任务应该是递归函数还是 GenServer?
问题描述
我正在持续监控一个值以进行检测。我想知道如果它是递归函数,它会可靠地工作吗?或者我应该创建一个 Genserver 并连续调用它以便它可以处理故障?哪些是使用 Genserver 的最佳案例,哪些不是。
解决方案
GenServer 也只是一个递归调用的函数,但它在自己的进程中运行,并且在顶部有一些附加功能。
出于以下几个原因,您需要将长时间运行的进程建模为 GenServer:
- 并行性 - 如果实现为 GenServer,也就是一个单独的进程,系统将能够并行执行其他操作
- 隔离错误 - 如果 GPIO 代码崩溃,您不想影响系统的其余部分
- 监督 - 拥有 GenServer 允许系统在出现故障时重新启动。它还使您能够定义依赖于 GPIO 进程的其他进程,例如数据的消费者。
我建议阅读 Dave Thomas 的“Programming Elixir”中的“Working with Multiple Processes”一章,以了解有关进程等的更多信息。
推荐阅读
- php - Laravel 购物车 (5.8)
- html - 如何在 HTML5 data-* 属性中直接包含 JSON,以便 JSON 保持人类可读和机器可读?
- swift - 带有 SceneKit 的 SwiftUI:如何使用视图中的按钮操作来操作底层场景
- java - 字符串资源未传递给静态应用 Java 类
- python - How to filter out profiles that have an appointment (foreign key relationship)?
- java - 如何将 Json 反序列化为 Map 的 Map?
- python - 决策树二元变量节点解释
- swift - 在多个线程上处理实时照片
- c++ - MFC 的 CDocument::ReleaseFile 示例
- python - 无法清除字段 (clear()) 不起作用