在erlang中注册全局和本地supervisor有什么区别

ell*_*nce 2 erlang erlang-otp

我是 erlang 新手,我正在查看一些有关启动主管的文档http://erlang.org/doc/man/supervisor.html#start_link-3

start_link/3 函数可能返回

{local, Name :: atom()} |
{global, Name :: atom()} |
Run Code Online (Sandbox Code Playgroud)

文档说:

If SupName={local,Name}, the supervisor is registered locally as Name using register/2.
If SupName={global,Name}, the supervisor is registered globally as Name using global:register_name/2.
Run Code Online (Sandbox Code Playgroud)

本地注册与全球注册意味着什么?

小智 6

  • local:只为本地节点注册你的pid,如果你有Erlang集群,你可以在其他节点上使用相同的名称。
  • 全局:为所有 Erlang 集群注册此名称,并提醒每个节点有关此名称的信息。

来自全局:register_name/3

当新节点添加到网络时,它们会被告知已经存在的全局注册名称。网络还会获悉新连接节点中的任何全局名称。如果发现任何名称冲突,则会调用函数 Resolve。它的目的是决定哪个pid是正确的。如果函数崩溃或返回 pid 之一以外的任何内容,则该名称未注册。每次名称冲突都会调用此函数一次。

当您启动流程时,此功能适用于所有标准 OTP 行为。