在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}}.
答案 0 :(得分:6)
来自erlang application behavior documentation:
启动应用程序时会调用
start
,并应通过启动顶级主管来创建监督树。预计将返回顶级主管的pid和可选术语State
,默认为[]
。该术语按原样传递停止。
他有这个虚拟主管,所以他可以在开始函数here的末尾调用它。我认为除了满足这个条件外没有任何实际意义。
答案 1 :(得分:1)
您无需指定主管在启动时管理的所有子项。您可以使用supervisor:start_child/2
动态添加/启动它们,并使用supevisor:restart_child/2
,supervisor:terminate_child/2
和supervisor:delete_child/2
进行管理。这意味着,即使主管从一开始就没有孩子,但这并不意味着它只是一个假人。
真正的主管“不做任何事情”的评论很可能与这样一个事实有关,即主管只能在主管处理而不能像工人流程那样做任何工作。或者至少它应该意味着什么!