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



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

的文档

start_link/3 函数可能返回

{local, Name :: atom()} |
{global, Name :: atom()} |

纪录片说:

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.

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

  • local:仅为本地节点注册 pid,如果您有 Erlang 集群,则可以在其他节点上使用相同的名称。
  • global:为所有 Erlang 集群注册此名称,并提醒每个节点此名称。

从全球:register_name/3:

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

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

最新更新