像 GPIO read forever 这样的任务应该是递归函数还是 GenServer?

Task like GPIO read forever should be a recursive function or GenServer?

我正在持续监控一个值以进行检测。我想知道如果它是递归函数它会可靠地工作吗?或者我应该创建一个 Genserver 并不断调用它,以便它可以处理故障?哪些是使用 Genserver 的最佳案例,哪些不是。

GenServer 也只是一个递归调用的函数,但它 运行 在其自己的进程中,并且在顶部具有一些附加功能。

出于以下几个原因,您需要将长 运行 进程建模为 GenServer:

  • 并行性——如果作为 GenServer 实现,也就是一个单独的进程,系统将能够并行地做其他事情
  • 隔离错误 - 如果 GPIO 代码崩溃,您不想影响系统的其余部分
  • 监督 - 拥有 GenServer 允许系统在出现故障时重新启动。它还使您能够定义依赖于 GPIO 进程的其他进程,例如数据的消费者。

我建议阅读 Dave Thomas "Programming Elixir" 的第 "Working with Multiple Processes" 章,以了解有关流程等的更多信息。