Erlang消息队列混乱

时间:2018-04-02 22:28:54

标签: process erlang message-queue

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

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

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

1 个答案:

答案 0 :(得分:3)

  

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

是的,选择性接收会导致进程耗尽内存。

  

Erlang如何处理这种情况?

receive 
    Pattern1 -> %% do something;
    Pattern2 -> %% do something else;
    Other -> ok
end

或者,经过一段时间后:

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