像GPIO这样永远读取的任务应该是递归函数还是GenServer?

时间:2019-01-09 07:34:56

标签: elixir nerves-project

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

1 个答案:

答案 0 :(得分:2)

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

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

  • 并行性-如果作为GenServer(又称为独立进程)实现,则系统将能够并行执行其他操作
  • 隔离错误-如果GPIO代码崩溃,则您不希望影响系统的其余部分
  • 监督-具有GenServer可使系统在发生故障时重新启动。它还使您能够定义取决于GPIO进程的其他进程,例如数据的使用者。

我建议阅读Dave Thomas的“ Programming Elixir”中的“使用多个流程”一章,以了解有关流程等的更多信息。