You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang中全局与本地注册Supervisor的区别咨询

Erlang Supervisor 本地注册 vs 全局注册

嘿,刚接触Erlang的话,这个进程注册的区别确实是基础但关键的点,我给你掰扯清楚~

本地注册({local, Name})

  • 这是把Supervisor进程绑定到当前Erlang节点的本地进程注册表里。简单说,只有在启动这个Supervisor的同一个节点上,你才能通过Name直接定位到它,比如用supervisor:which_children(Name)这类调用。
  • 不同节点之间的本地注册表是完全独立的,就算别的节点也有个叫Name的进程,两者完全不冲突,各自玩各自的。
  • 底层就是调用了register/2函数,这个函数本身就只负责当前节点内的进程注册。

全局注册({global, Name})

  • 这个是把Supervisor进程注册到跨节点的全局进程注册表里——只要你的Erlang集群里的节点互相连通了,不管在哪个节点上,都能通过Name找到这个Supervisor进程。
  • 全局注册有个核心特性:整个集群里绝对不会有重名的注册进程。如果已经有一个进程用这个Name完成了全局注册,再启动同名的就会直接失败,避免了命名冲突。
  • 底层依赖的是global:register_name/2函数,这个模块专门管分布式场景下的进程全局命名。

什么时候用哪种?

  • 如果你的应用只在单个Erlang节点上跑,本地注册就够了,简单又高效,没必要搞全局的。
  • 如果是做分布式Erlang集群,比如多个节点协同处理任务,需要在任意节点都能调用同一个Supervisor,那全局注册就是必需的。

内容的提问来源于stack exchange,提问作者elliance

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:28:23