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

Posted

技术标签:

【中文标题】在erlang中注册全局主管和本地主管有啥区别【英文标题】:What the difference between registering a global and local supervisor in erlang在erlang中注册全局主管和本地主管有什么区别 【发布时间】:2018-06-23 04:07:21 【问题描述】:

我是 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.

在本地注册和在全球注册是什么意思?

【问题讨论】:

【参考方案1】: local:仅为本地节点注册您的 pid,如果您有 Erlang 集群,您可以在其他节点上使用相同的名称。 global:为你所有的 Erlang 集群注册这个名字,并提醒每个节点这个名字。

来自global:register_name/3:

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

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

【讨论】:

我想我会在弄清楚分布式 erlang 之后了解更多。

以上是关于在erlang中注册全局主管和本地主管有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

无法从 shell 生成 erlang 主管

OTP 主管可以监控远程节点上的进程吗?

Erlang主管:simple_one_for_one和one_for_one重启策略之间的区别

Erlang 主管有一个关键的孩子

Erlang 主管进程

nodemon,主管,永远都给出不同的错误,有啥建议吗?