Erlang 全局和本地名称

Erlang global and local names

为什么local names (registered using erlang:register/2) 只能是原子而不是任意项,但是global 名称可以是任何东西(使用 global:register_name/2,3 注册)。

来自 gen.erl 的类型规范:

-type emgr_name()  :: {'local', atom()}
                    | {'global', term()}
                    | {'via', Module :: module(), Name :: term()}.

为什么不能给一个localgen_server一个任意的名字?

因为本地注册是 Erlang 的特性(写在 C 上)。 但是全局注册是 OTP 的全局模块的特性。它只是标准行为的扩展。