首页 > 解决方案 > 像 GPIO read forever 这样的任务应该是递归函数还是 GenServer?

问题描述

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

标签: elixirnerves-project

解决方案


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

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

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

我建议阅读 Dave Thomas 的“Programming Elixir”中的“Working with Multiple Processes”一章,以了解有关进程等的更多信息。


推荐阅读