Erlang - Elixir:什么是监督树?

时间:2017-10-03 22:37:15

标签: erlang elixir otp

我正在做一个教程,它说"在本指南中,我们将学习如何构建一个完整的Elixir应用程序,它有自己的监督树,配置,测试和更"

简单来说,Elixir的监督树是什么?

谢谢!

2 个答案:

答案 0 :(得分:13)

在Erlang和Elixir应用程序中,通过使用顶级“主管”进程来强制执行结构,该进程启动应用程序中的其他进程。那些其他过程可以包括其他主管,它们也有自己的孩子,这种递归结构采用树的形状,因此是“监督树”。对进程的监督使得Erlang / Elixir具有容错功能,因为故障被隔离到树的某个分支,该分支的主管可以重新启动失败的子进程,也可以让自己失败,将故障冒出来到树上的下一位最高管理员。

答案 1 :(得分:0)

由于你已经标记了Erlang,我将回答这个Erlang的观点。但是Erlang,Elixir也是如此。

Erlang是一种面向并发的编程语言。意味着它建立起来处理并发性。电信/协议相关应用中特别需要的一个主要特征。几乎每种编程语言都有一种处理并发操作的机制。

例如,

  • Java使用多线程(多线程)来处理 并发
  • Go使用频道来处理并发
  • 同样,Erlang使用 actor模型来处理并发。

简明英语的演员模型

在演员模型中,我们有两种类型的过程。

  1. 基本上,主管负责监督工人流程。而已。如果我们想创建一个工作流程来执行一些工作,我们请主管为我们创建它。如果工人死亡,主管将为您重新启动它。您不必担心工人流程的健康状况。此外 主管也可以是其他主管。

    工作进程可以执行某些任务。而已。它将执行任何分配的任务,然后死掉。如果由于非正常原因导致死亡/崩溃,其主管将重新启动工作进程以执行其预期任务。

    总的来说,我们可以有一个根管理员(称之为S0)来管理2个主管S1,S2。 S2管理另一个管理员S3。 S3监督5个工人流程,即W1-W5。整个层次结构是Erlang / Elixir 中的监督树。

    以下是RADIUS协议相关项目中的示例监督树。 https://github.com/sigscale/radierl/blob/master/doc/supervision.png

    有很多与演员模型相关的东西,如消息传递等。This将是了解演员模型的好地方。