首页 > Erlang并发教程 > 6.3 Erlang并发编程-消息接收的顺序
2013
11-13

6.3 Erlang并发编程-消息接收的顺序

消息接收的顺序

receive尝试寻找一个匹配的消息的时候,它会依次对邮箱中的每一个消息尝试用给定的每个模式去进行匹配。我们用下面的例子来解释其工作原理。

图5.2(a)给出了一个进程的邮箱,邮箱里面有四个消息,依次是msg_1msg_2msg_3msg_4。运行

receive
    msg_3 ->
        ...
end
../_images/5.2.png图5.2

会匹配到邮箱中的msg_3并导致它被从邮箱中删除。然后邮箱的状态会变成如图5.2(b)所示。当我们再运行

receive
    msg_4 ->
        ...
    msg_2 ->
        ...
end

的时候,receive会依次对邮箱中的每一个消息,首先尝试与msg_4匹配,然后尝试与msg_2匹配。结果是msg_2匹配成功并被从邮箱中删除,邮箱的状态变成图5.2(c)那样。最后,运行

receive
    AnyMessage ->
        ...
end

其中AnyMessage是一个未绑定(unbound)的变量,receive会匹配到邮箱里的msg_1并将其删除,邮箱中最终只剩下msg_4,如图5.2(d)所示。

这说明receive里的模式的顺序并不能直接用来实现消息的优先级,不过这可以通过超时的机制来实现.


6.3 Erlang并发编程-消息接收的顺序》有 1 条评论

  1. ***xt=******(青山未来 絢森いちか 椎名そら)3725EA925C3CE23702190D4C665C2D75A91831BF&dn=RCT-850_CAVI括弧去掉

留下一个回复

你的email不会被公开。