7

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

据我了解,循环将从“接收”消息开始,然后执行某些操作并命中循环的另一个迭代。

所以一定要同步?对?

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

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

还是我误解了这一切?

4

2 回答 2

9

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

于 2010-05-31T12:12:00.583 回答
4

从手册(Erlang并发

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

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

于 2010-05-31T12:05:04.470 回答