Erlang四大behaviour之四
阿新 • • 發佈:2018-12-12
1. 監督規則
一個監督者負責啟動、停止、監控他的子程序。監督者的一個基本概念就是當必要的時候重啟子程序保證它們的存活 哪個子程序要重啟和被監控是由一個子規程列表決定的,子程序按照列表中指定的順序啟動,並按相反的順序終止2. 例項
監督者的回撥模組12345678910 | <span style="color: rgb(1, 78, 164);">-</span><span style="color: rgb(84, 0, 179);">module</span><span style="color: rgb(16, 154, 184);">(</span>ch_sup<span style="color: rgb(16, 154, 184);">)</span><span |
3. 重啟策略
one_for_one
假如一個程序終止了,僅僅這個程序會被重啟one_for_all
假如一個程序停止了,所有其他子程序也要被停止,然後所有子程序,包括這個引發停止的子程序都被重啟 rest_for_one 假如一個程序停止了,它後面的子程序,也就是以啟動順序來說這個被終止的程序後面的子程序都將被停止,然後他們又被啟動。
4. 最大啟動頻率
監督者有一個內建機制限制在給定的時間間隔裡的重啟次數,這由子程序啟動規程中的兩個引數值決定,MaxR和MaxT,它們定義在回撥函式init 中123 | <span style="color: rgb(255, 60, 0);">init</span><span style="color: rgb(16, 154, 184);">(</span><span style="color: rgb(107, 184, 16);">...</span><span style="color: rgb(16, 154, 184);">)</span><span style="color: rgb(107, 184, 16);">-></span><span style="color: rgb(16, 154, 184);">{</span>ok<span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(16, 154, 184);">{</span><span style="color: rgb(16, 154, 184);">{</span><span style="color: rgb(69, 179, 230);">RestartStrategy</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">MaxR</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">MaxT</span><span style="color: rgb(16, 154, 184);">}</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(16, 154, 184);">[</span><span style="color: rgb(69, 179, 230);">ChildSpec</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(107, 184, 16);">...</span><span style="color: rgb(16, 154, 184);">]</span><span style="color: rgb(16, 154, 184);">}</span><span style="color: rgb(16, 154, 184);">}</span><span style="color: rgb(107, 184, 16);">.</span> |
5. 子規範
下面的是型別定義12345678910 | <span style="color: rgb(16, 154, 184);">{</span><span style="color: rgb(69, 179, 230);">Id</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">StartFunc</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">Restart</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">Shutdown</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">Type</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">Modules</span><span style="color: rgb(16, 154, 184);">}</span><span style="color: rgb(69, 179, 230);">Id</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(255, 60, 0);">term</span><span style="color: rgb(16, 154, 184);">(</span><span style="color: rgb(16, 154, 184);">)</span><span style="color: rgb(69, 179, 230);">StartFunc</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(16, 154, 184);">{</span><span style="color: rgb(69, 179, 230);">M</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">F</span><span style="color: rgb(107, 184, 16);">,</span><span style="color: rgb(69, 179, 230);">A</span><span style="color: rgb(16, 154, 184);">}</span><span style="color: rgb(69, 179, 230);">M</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(69, 179, 230);">F</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(255, 60, 0);">atom</span><span style="color: rgb(16, 154, 184);">(</span><span style="color: rgb(16, 154, 184);">)</span><span style="color: rgb(69, 179, 230);">A</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(16, 154, 184);">[</span><span style="color: rgb(255, 60, 0);">term</span><span style="color: rgb(16, 154, 184);">(</span><span style="color: rgb(16, 154, 184);">)</span><span style="color: rgb(16, 154, 184);">]</span><span style="color: rgb(69, 179, 230);">Restart</span><span style="color: rgb(1, 78, 164);">=</span> permanent | transient | temporary<span style="color: rgb(69, 179, 230);">Shutdown</span><span style="color: rgb(1, 78, 164);">=</span> brutal_kill | <span style="color: rgb(255, 60, 0);">integer</span><span style="color: rgb(16, 154, 184);">(</span><span style="color: rgb(16, 154, 184);">)</span> &gt<span style="color: rgb(107, 184, 16);">;</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(255, 150, 0);">0</span> | infinity<span style="color: rgb(69, 179, 230);">Type</span><span style="color: rgb(1, 78, 164);">=</span> worker | supervisor<span style="color: rgb(69, 179, 230);">Modules</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(16, 154, 184);">[</span><span style="color: rgb(69, 179, 230);">Module</span><span style="color: rgb(16, 154, 184);">]</span> | dynamic<span style="color: rgb(69, 179, 230);">Module</span><span style="color: rgb(1, 78, 164);">=</span><span style="color: rgb(255, 60, 0);">atom</span><span style="color: rgb(16, 154, 184);">(</span><span style="color: rgb(16, 154, 184);" |