【发布时间】:2014-06-19 18:35:15
【问题描述】:
在阅读 ERTS 用户指南时,我发现了以下部分:
给出的唯一信号排序保证如下。如果一个实体向同一个目的地发送多个信号 实体,订单将被保留。也就是说,如果 A 向 B 发送信号 S1,然后再向 B 发送信号 S2,则 S1 是 保证不会在S2之后到达。
我在做进一步的研究谷歌搜索时也遇到过这个问题:
Erlang 参考手册,13.5:
消息发送是异步且安全的,只要接收者存在,消息就可以保证最终到达接收者。
这似乎很模糊,我想知道在以下情况下我可以依赖什么保证:
A,B are processes on two different nodes.
Assume A does not crash and B was a valid node at some point.
A and B monitor each other.
A sends messages M1,M2,M3 to B
在上述场景中,是否有可能B收到M1,M3(M2被丢弃), 在 A 处没有收到任何类型的“DOWN”/“EXIT”/心跳超时?
【问题讨论】:
-
真的取决于A和B代表什么。在本地进程的情况下,这是不可能的:所有消息都将被 B 接收(尽管 B 可能在处理 M2 或 M3 之前崩溃)。在远程进程的情况下,这是极不可能的,但是是的,这意味着节点之间会断开连接。
-
@Soupd'Campbells 你有可以支持它的文档链接吗?特别是,这是“保证”,而不仅仅是其实施方式的结果?
-
我已经用更具体的场景更新了这个问题。