据我所知,Erlang 总是处理
receive
邮箱中[到达]的第一条消息,这些消息是与模式匹配的。我很好奇这是否可以用来获得以下假设:
如果一个进程
a
做了
self() ! its_me,
b ! go,
receive
X -> X
end.
而且
b
确实
receive
_ -> a ! its_not_me
end
那么我有没有保证
a
会先收到自己发来的消息(X = its_me
)?
问题涉及如何实现 send-to-self 或 send-within-node ;是否立即将消息放入队列中,或者消息是否在某个时刻“在路上”并且可能被其他消息超越。
如果
a
和b
都会将消息发送给其他c
,那么c
是否会收到its_me
或its_not_me
显然是不确定的。然而,在这里我有更多前提:
a
在 a
发送到 a
之前发送到
b
b
的 mbox 在 a
接收来自 b
之前从
a
b
在 a
发送到 b
之前从
a
a
必须在其消息框收到来自 b
我想知道的是,结论是否意味着
a
的mbox先于a
接收到来自
b
的消息