我定義simple_one_for_one工人規格爲一名監事名爲band_supervisor,孩子規範ID爲jam_musician
:爲什麼simple_one_for_one工作人員可以共享同一個Child Spec ID?
init([]) ->
{ok, {{simple_one_for_one, 3, 60},
[{jam_musician,
{musicians, start_link, []},
temporary, 1000, worker, [musicians]}
]}};
音樂家模塊:
-module(musicians).
-behaviour(gen_server).
-export([start_link/2, stop/1]).
-export([init/1, handle_call/3, handle_cast/2,
handle_info/2, code_change/3, terminate/2]).
-record(state, {name="", role, skill=good}).
-define(DELAY, 750).
start_link(Role, Skill) ->
gen_server:start_link({local, Role}, ?MODULE, [Role, Skill], []).
stop(Role) -> gen_server:call(Role, stop).
,我可以創造出許多工人:
3> supervisor:start_child(band_supervisor, [drum, good]).
Musician Arnold Ramon, playing the drum entered the room
{ok,<0.696.0>}
3> supervisor:start_child(band_supervisor, [guitar, good]).
Musician Wanda Perlstein, playing the guitar entered the room
{ok,<0.698.0>}
我注意到所有工人都有相同的子規格ID:jam_musician
你知道其他類型的工人必須擁有唯一的孩子ID,對嗎?
你可以發佈你的音樂家模塊代碼嗎?看起來您正在註冊具有相同名稱的子進程。 – Isac
是的,您的代碼也適用於主管模塊。有些事情是錯誤的,因爲你無法從'simple_one_for_one'管理器獲得'already_started'。 – rvirding
@Isac已更新,子規格ID可以重複? – why