繁体   English   中英

Erlang - Elixir:什么是监督树?

[英]Erlang - Elixir: What is a supervision tree?

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

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

谢谢!

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

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

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

所以,例如,

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

演员模型用简单的英语

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

  1. 监事
  2. 工作人员

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM