erlang消息传递架构

时间:2015-06-08 13:50:37

标签: process erlang messaging

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

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

C会从A收到完整的消息,然后从B继续发送消息吗?或者是C可能会收到A的消息块以及B&B的消息块?

1 个答案:

答案 0 :(得分:4)

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

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

  1. 在发送过程中分配目标内存空间(称为环境)。
  2. 将邮件复制到该内存空间
  3. 对目标进程进行外部锁定
  4. 将邮件链接到邮箱链表
  5. 释放目标进程上的外部锁
  6. 正如您所看到的,复制是在关键部分之外(之前)完成的,并且关键部分非常快。只是提供了一些指针。