【问题标题】:Erlang process sending messageErlang进程发送消息
【发布时间】:2014-06-07 22:42:52
【问题描述】:

我知道 Erlang 进程消息是同步的。 当我这样做时

皮!留言

  1. 发送消息线程现在返回
  2. 发送消息线程将确认消息已放入 Pid 的消息队列,然后返回。

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

【问题讨论】:

    标签: erlang


    【解决方案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 消息队列的权利。所以有些进程可能会等待片刻。
      猜你喜欢
      • 2020-10-08
      • 2015-11-27
      • 2012-09-12
      • 2012-10-14
      • 2019-07-23
      • 1970-01-01
      • 2012-04-27
      • 2023-03-31
      • 2015-07-01
      相关资源
      最近更新 更多