Process Erlang消息队列混乱

Process Erlang消息队列混乱,process,erlang,message-queue,Process,Erlang,Message Queue,我不太确定如何着手找到这类问题的答案。在Erlang中,每个进程都有一个消息队列。发送到进程的消息可能与该特定进程的任何模式都不匹配。如果是这种情况,进程将消息留在队列中,并继续检查其他消息。我的问题是: 这不会造成轻微的内存泄漏吗 假设一个进程可以继续接收它无法匹配的消息,并不断增长,最终导致问题。Erlang如何处理这种情况?我知道Erlang有一个超时实现,但是如果这些消息没有超时,这会导致问题吗?是否存在任何类型的默认垃圾收集 这不会造成轻微的内存泄漏吗 是的,选择性接收可能导致进程内存

我不太确定如何着手找到这类问题的答案。在Erlang中,每个进程都有一个消息队列。发送到进程的消息可能与该特定进程的任何模式都不匹配。如果是这种情况,进程将消息留在队列中,并继续检查其他消息。我的问题是:

这不会造成轻微的内存泄漏吗

假设一个进程可以继续接收它无法匹配的消息,并不断增长,最终导致问题。Erlang如何处理这种情况?我知道Erlang有一个超时实现,但是如果这些消息没有超时,这会导致问题吗?是否存在任何类型的默认垃圾收集

这不会造成轻微的内存泄漏吗

是的,选择性接收可能导致进程内存不足

Erlang如何处理这种情况

或者,经过一段时间后:

myflush() ->
    receive 
        _Any -> myflush()
    after 0 ->  % If at any time there are no messages in the mailbox, this executes.
        ok
    end.

这不会造成轻微的内存泄漏吗?--对Erlang如何处理这种情况?--
Other->ok
因此_Any->myflush()只需再次调用函数,继续等待潜在的消息。但是,如果消息与任何模式都不匹配,那么after是否会简单地结束该进程?也谢谢你的回复!事实上,我在LearnyYouSomerlang上发现了这个“当这种情况发生时,Erlang VM将尝试查找符合可用模式之一的消息。在上面的例子中,任何内容都匹配。只要有消息,flush/0函数就会递归地调用自己,直到邮箱为空。完成此操作后,将执行代码的after 0->ok部分,函数返回“
myflush() ->
    receive 
        _Any -> myflush()
    after 0 ->  % If at any time there are no messages in the mailbox, this executes.
        ok
    end.