gpt4 book ai didi

process - 在 Erlang 中发送大消息时是否有触发竞争条件的风险?

转载 作者:行者123 更新时间:2023-12-02 15:55:25 25 4
gpt4 key购买 nike

在 Erlang 中,如果两个进程 A 和 B 同时向进程 C 发送消息。会出现竞争条件吗?

  • C! A 发送的{非常大的消息}
  • C! B 发送的{非常大的消息}

C 会收到来自 A 的完整消息,然后继续处理来自 B 的消息吗?或者 C 是否可能会同时接收 A 的消息 block 和 B 的消息 block ?

最佳答案

消息接收是一个原子操作。

如果您对它是如何完成的感兴趣,请阅读VM的源代码。如果我简化一下,发送过程正在执行以下步骤:

  1. 在发送进程中分配一个目标内存空间(称为环境)。
  2. 将消息复制到该内存空间
  3. 对目标进程进行外部锁定
  4. 将邮件链接到邮箱链接列表
  5. 释放目标进程的外部锁

正如您所看到的,复制是在关键部分之外(之前)完成的,并且关键部分非常快。它只是用一些指针来玩杂耍。

关于process - 在 Erlang 中发送大消息时是否有触发竞争条件的风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30710923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com