Erlang消息循环

Erlang消息循环,erlang,parallel-processing,message-loop,Erlang,Parallel Processing,Message Loop,erlang中的消息循环是如何工作的,它们在处理消息时是同步的吗 据我所知,循环将从“接收”一条消息开始,然后执行某个操作并执行循环的另一次迭代 所以这必须是同步的?对吧? 如果多个客户端向同一个消息循环发送消息,那么所有这些消息都将排队并逐个执行,或者 要并行处理多个消息,您必须在不同的进程中生成多个消息循环,对吗 还是我误解了所有这些?来自手册( 每个进程都有自己接收的消息的输入队列。接收到的新消息放在队列的末尾。当进程执行接收时,队列中的第一条消息与接收中的第一个模式匹配,如果匹配,则从队

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

据我所知,循环将从“接收”一条消息开始,然后执行某个操作并执行循环的另一次迭代

所以这必须是同步的?对吧?

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

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

还是我误解了所有这些?

来自手册(

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


因此,您可以使用regex创建prio,但并发是通过多个进程完成的。

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