簡體   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