我不太确定如何找到这类问题的答案。在Erlang中,每个进程都有一个消息队列。发送到进程的消息可能与该特定进程的任何模式都不匹配。如果是这种情况,则进程将消息留在队列中并继续检查其他消息。我的问题是:
这不会造成轻微的内存泄漏吗?
假设一个过程可能会继续接收无法匹配的消息,并且会增长,增长和增长,最终会导致问题。 Erlang如何处理这种情况?我知道Erlang有一个超时实现,但是如果这些消息没有超时会导致问题吗?有任何类型的默认垃圾收集?
答案 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.