【问题标题】:Confusion regarding abcast function and uniqueness of gen_server names关于 abcast 函数和 gen_server 名称唯一性的混淆
【发布时间】:2015-10-11 01:44:33
【问题描述】:

来自erlang.org/doc,gen_server 部分:

start_link(ServerName, Module, Args, Options) -> 结果

如果已经存在具有指定ServerName 的进程,则函数返回 {error,{already_started,Pid}}

显然,Erlang 不允许多个进程具有相同的名称。

好的,现在让我们看看another function

abcast(名称,请求)->abcast

向指定节点本地注册为Namegen_servers发送异步请求。

注意复数形式的使用。

既然 Erlang 要求 gen_server 进程的名称是唯一的,为什么 abcast 函数会实现异步消息发送给多个同名的进程?

我错过了什么?

【问题讨论】:

    标签: erlang message-passing gen-server


    【解决方案1】:

    在指定节点本地注册为名称的 gen_servers 发送异步请求。

    您可以有多个节点,进程注册为名称

    【讨论】:

    • 是的,但abcast/2 甚至不接受 [Node] 参数。那么abcast 不就是cast 吗?
    • abcast/2 将消息发送到列表[node() | nodes()] 中的所有节点。
    • 所以abcast/2会默认发送到对应VM中的所有活动节点?
    • 是的,abcast/2 发送到所有已知节点和发送节点本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多