Erlang消息循环

时间:2010-05-31 11:59:50

标签: erlang parallel-processing message-loop

erlang中的消息循环如何工作,它们在处理消息时是否同步?

据我了解,循环将以“接收”消息开始,然后执行某些操作并点击循环的另一次迭代。

那必须要同步吗?正确?

如果多个客户端向同一个消息循环发送消息,那么所有这些消息都会排队并一个接一个地执行,或者?

要在parallell中处理多个消息,您必须在不同的进程中生成多个消息循环,对吗?

还是我误解了所有这些?

2 个答案:

答案 0 :(得分:9)

发送消息是异步的。处理消息是同步的 - 一次接收一条消息 - 因为每个进程都有自己的(并且只有一个)邮箱。

答案 1 :(得分:4)

从手册(Erlang concurrency

  

每个进程都有自己的输入队列,用于接收的消息。收到的新消息放在队列的末尾。当进程执行接收时,队列中的第一条消息与接收中的第一个模式匹配,如果匹配,则从队列中删除消息并执行与该模式对应的操作。
  但是,如果第一个模式不匹配,则测试第二个模式,如果匹配,则从队列中删除消息并执行与第二个模式相对应的操作。如果第二个模式不匹配则尝试第三个模式,依此类推,直到没有更多模式要测试。如果没有更多要测试的模式,则第一条消息将保留在队列中,我们会尝试第二条消息。如果这匹配任何模式,则执行适当的操作,并从队列中删除第二条消息(保留队列中的第一条消息和任何其他消息)。如果第二条消息不匹配,我们尝试第三条消息,依此类推,直到我们到达队列末尾。如果我们到达队列的末尾,则进程阻塞(停止执行)并等待直到收到新消息并重复此过程。
当然,Erlang实现是“聪明的”并且最小化每个的次数消息将针对每次接收中的模式进行测试。

因此,您可以使用正则表达式创建prios,但并发性是通过多个进程完成的。