了解Erlang/Elixir中的主管职责
我写了一个新的图书馆叫 这是一个主管图书馆。了解Erlang/Elixir中的主管职责,erlang,elixir,erlang-stdlib,Erlang,Elixir,Erlang Stdlib,我写了一个新的图书馆叫 这是一个主管图书馆。 它的一个特性是给控制器一个arity 2的乐趣,控制器将为进程的每次崩溃调用函数,第一个参数是崩溃原因,第二个参数是崩溃计数,例如: -module(director_test). -behaviour(director). -export([start_link/0, init/1]). start_link() -> director:start_link(?MODULE, []). init([]) -> Chi
它的一个特性是给控制器一个arity 2的乐趣,控制器将为进程的每次崩溃调用函数,第一个参数是崩溃原因,第二个参数是崩溃计数,例如:
-module(director_test).
-behaviour(director).
-export([start_link/0, init/1]).
start_link() ->
director:start_link(?MODULE, []).
init([]) ->
ChildSpec = #{id => foo,
start => {m, f, args},
plan => [fun my_plan/2],
count => infinity},
{ok, [ChildSpec]}.
my_plan(normal, Count) when Count rem 10 == 0 ->
%% If process crashed with reason normal after every 10 times
%%, director will restart it after spending 3000 milliseconds.
{restart, 3000};
my_plan(normal, _Count) ->
%% If process crashed with reason normal director will restart its
restart;
my_plan(killed, _Count) ->
%% If process was killed, Director will delete it from its children
delete;
my_plan(Reason, Count) ->
%% For other reasons, director will crash with reason {foo_crashed, Reason}
{stop, {foo_crashed, Reason}}.
我宣布我的图书馆处于闲置状态,他们想用这种方式来撰写新的主管!
有人说“我倾向于不让主管退让”。最后,他们没有告诉我干净的信息,我想我需要更多地了解主管及其职责等。 我认为主管是一个应该了解何时重新启动哪个子级、何时删除哪个子级以及何时不重新启动哪个子级的过程我说得对吗?
你能告诉我一些我在Director中没有的OTP/主管的优点吗?()请不要把这件事当回事。你已经要求得到反馈,我正试图给你 快速查看文档和代码后,我认为您的库的主要问题是:
你把监督和管理的思想混为一谈 监督已经是OTP的一部分。其基本思想是:
- 任何进程都不可能成为孤立进程
- 崩溃将被重新启动或中止,这是在编写内部逻辑之前做出的体系结构决策
- 可以在外部记录崩溃(由进程处理,而不是任何失败的进程)
- 错误处理代码、崩溃取证等都不会作为监督的一部分出现。曾经(复杂的逻辑导致复杂的怪异,监管需要简单、稳健和可靠。)
不久前,我在Erlang中写了一篇关于“服务->工作者模式”的文章。希望它能提供更多信息,而不是混淆:通常,当新的东西出现时,你有责任展示你的库中有什么好东西,让我们依赖它,而不是从一开始就使用OTP核心中简单的旧好范例?我就是这么做的(我想),但问题是,他们导致我认为这是正确和正确的方法吗?许多thakns为你们花费的时间只是为了给出反馈。