在许多牛仔示例中,一对一主管的目的是什么?

时间:2012-10-05 15:57:13

标签: erlang cowboy

在Cowboy github上提供的示例中,以及我在线发现的其他一些示例中,有一对一的主管似乎什么也没做。我甚至认为我看到了一个有以下评论的例子,“就像真正的主管不做任何事情一样。”

主管模块的目的是什么,似乎是许多牛仔示例的一部分?

来自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}}.

2 个答案:

答案 0 :(得分:6)

来自erlang application behavior documentation

  启动应用程序时会调用

start,并应通过启动顶级主管来创建监督树。预计将返回顶级主管的pid和可选术语State,默认为[]。该术语按原样传递停止。

他有这个虚拟主管,所以他可以在开始函数here的末尾调用它。我认为除了满足这个条件外没有任何实际意义。

答案 1 :(得分:1)

您无需指定主管在启动时管理的所有子项。您可以使用supervisor:start_child/2动态添加/启动它们,并使用supevisor:restart_child/2supervisor:terminate_child/2supervisor:delete_child/2进行管理。这意味着,即使主管从一开始就没有孩子,但这并不意味着它只是一个假人。

真正的主管“不做任何事情”的评论很可能与这样一个事实有关,即主管只能在主管处理而不能像工人流程那样做任何工作。或者至少它应该意味着什么!