【发布时间】:2019-07-23 21:01:06
【问题描述】:
Erlang 中的消息发送是异步的,这意味着由进程PidA 评估的诸如PidB ! msg 的发送表达式会立即产生结果msg 而不会阻塞后者。自然,它的副作用是发送 msg 到 PidB。
由于这种消息传递模式不提供任何消息传递保证,发送者必须自己确定消息是否已实际传递,方法是要求接收者进行相应的确认。毕竟,可能并不总是需要确认消息是否已送达。
这在本地和分布式情况下都适用:在后一种情况下,发送方不能简单地假设远程节点始终可用;在本地场景中,进程位于同一个 Erlang 节点上,进程可能会向不存在的进程发送消息。
我很好奇! 的副作用部分,ie,消息发送,当发送者和接收者进程在 相同 节点。特别想知道发送操作是否在返回之前完成。通过完成,我的意思是对于本地进程的特定情况,发送方:(i) 获取接收方消息队列上的锁,(ii)将消息直接写入其队列,(iii) 释放锁,(iv) 最后返回。
我遇到了这个post,我并不完全理解,尽管它似乎表明可能是这种情况。
【问题讨论】:
标签: erlang