5

Cowboy github で提供されている例や、私がオンラインで見つけた他の例のいくつかには、何もしていないように見える 1 対 1 のスーパーバイザーがあります。「本当のスーパーバイザーは何もしないように」というコメントが含まれている例を見たとさえ思います。

非常に多くのカウボーイの例の一部と思われるスーパーバイザー モジュールの目的は何ですか?

echo_get の例から:

%% Feel free to use, reuse and abuse the code in this file.

%% @private-module(echo_get_sup).
-behaviour(supervisor).

%% API.
-export([start_link/0]).

%% supervisor.
-export([init/1]).

%% API.
-spec start_link() -> {ok, pid()}.
 start_link() ->    
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).

%% supervisor.
init([]) ->
    Procs = [], 
    {ok, {{one_for_one, 10, 10}, Procs}}.
4

2 に答える 2

6

Erlangアプリケーションの動作ドキュメントから:

startアプリケーションの起動時に呼び出され、最上位スーパーバイザを起動して監視ツリーを作成する必要があります。最上位スーパーバイザの pid とオプションの項State(デフォルトは ) を返すことが期待され[]ます。この項はそのまま渡されて停止します。

彼はこのダミー スーパーバイザーを持っているので、ここで開始関数の最後に呼び出すことができます。この条件を満たす以外に実用的な目的はないと思います。

于 2012-10-05T19:41:26.333 に答える
1

スーパーバイザーが起動時に管理するすべての子を指定する必要はありません。を使用して動的に追加/開始し、 、およびを使用supervisor:start_child/2して管理できます。これは、スーパーバイザーに最初から子がなくても、それが単なるダミーであるとは限らないことを意味します。supevisor:restart_child/2supervisor:terminate_child/2supervisor:delete_child/2

実際のスーパバイザは「何もしない」というコメントは、スーパバイザ プロセスのみを実行でき、ワーカー プロセスのような作業は一切実行できないという事実に関連している可能性が最も高いです。または、少なくともそれは意味するはずです!

于 2012-10-06T00:44:18.187 に答える