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进程发送消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Erlang 中发送/接收消息(并发)

为啥第二次调用接收没有在 Erlang shell 中检索消息?

Erlang 并发编程基础之一

Erlang Tracing:因果一致性?

Erlang 消息可以发送哪些类型的消息?

Erlang 并发编程