Erlang进程发送消息
Posted
技术标签:
【中文标题】Erlang进程发送消息【英文标题】:Erlang process sending message 【发布时间】:2014-06-07 22:42:52 【问题描述】:我知道 Erlang 进程消息是同步的。 当我这样做时
皮!留言
-
发送消息线程现在返回
发送消息线程将确认消息已放入 Pid 的消息队列,然后返回。
发送消息线程会做哪个选择?
【问题讨论】:
【参考方案1】:我相信您的理解可能是错误的。 Erlang 消息传递是异步的。 例如看看here。 要回答您的问题,那么选项编号 1 就是这里发生的事情。
【讨论】:
我的意思是当进程处理自己的消息队列时。它是同步的。 发件人不一定直接与收件人的邮箱交互。即使它们在同一个 Erlang VM 上,也可能存在中间转移步骤以避免内部锁。消息传递是完全异步的,甚至不能保证消息已经到达目标邮箱。 是的,这也是我对异步的意思。我已经更正了我的答案。 ^^ @baotiao 很高兴为您提供帮助。如果您认为正确,您会接受答案吗? meta.stackexchange.com/questions/5234/…【参考方案2】:在 Erlang 中,消息传递是异步的。 sender 从不阻塞。 不保证消息传递。注意事项:
如果向本地进程发送消息,那么在实践中,消息总是会很快到达。 如果向远程进程发送消息,则消息将排队等待发送。但由于 TCP 和分发的性质,不保证消息会被对方传输和处理。【讨论】:
【参考方案3】:我觉得
发送消息线程现在返回。
是对的。
因为Pid ! message
只是将message
放入进程Pid
的消息队列中。进程Pid
将使用receive
检查其消息队列。这与发送过程无关。
【讨论】:
我同意你的观点,但是当许多进程想要将消息发送到 Pid 的消息队列中时。进程争夺将消息放入 Pid 消息队列的权利。所以有些进程可能会等待片刻。以上是关于Erlang进程发送消息的主要内容,如果未能解决你的问题,请参考以下文章