2014-04-23 119 views
2

我知道Erlang进程消息是同步的。 当我做Erlang进程发送消息

Pid!消息

  1. 现在
  2. 发送消息线程将确认该消息已经把在PID的消息队列,然后返回发送消息线程的回报。

发送消息线程会选择哪个选项?

回答

3

我相信你的理解可能是错误的。 Erlang消息传递是异步。 例如看看here。 要回答你的问题,那么选项号码是这里发生了什么。

+0

I意味着进程处理自己的消息队列。它是同步的。 – baotiao

+3

发件人不一定直接与收件人的邮箱进行交互。即使它们在同一个Erlang虚拟机上,也可能存在传输的中间步骤以避免内部锁定。消息传递是完全异步的,甚至不保证消息已经到达目标邮箱。 – RichardC

+0

@RichardC您同意选项1?这样对吗? – baotiao

0

我觉得

发送消息线程回报现在。

是对的。

因为Pid ! message只是将message放入进程Pid的消息队列中。过程Pid将使用receive来检查其消息队列。这与发送过程没有任何关系。

+0

我同意你的看法,但是当许多进程想要将消息发送到Pid的消息队列时。这些过程争取将消息放入Pid的消息队列中的权利。所以一些进程可能会稍等片刻。 – baotiao

2

在Erlang中,消息传递是异步的。 发件人从不阻止。邮件递送是而不是保证。注意事项:

  • 如果发送本地进程消息,那么在实践中,消息总是到达并且非常快速地执行。
  • 如果发送远程进程消息,则消息将排队等待发送。但由于TCP和分发的性质,并不保证消息将被另一方传输和处理。