Erlang 收到 ***警告***

Erlang receive ***WARNING***

我有一个处于循环中并接收命令的进程。

receive
    increase ->
        ...
    decrease ->
        ...
    after 5000 ->
        ...
end

但是当我用数千条消息轰炸它时,它崩溃并收到这些警告。

警告消息:

***WARNING*** Unexp msg {<0.106.0>,rec_acked}, info {running,
                                                     [{'_UserConnections',20}],
                                                     {ieval,3994,34,log,
                                                      clientLogging,
                                                      [20],
                                                      false}}

有办法处理吗?它会引起任何问题吗?

感谢您的回答!

此代码仅供示例和练习使用,但请勿运行用于生产环境。
您应该始终收到来自进程邮箱的所有消息以及 select 收到后想要的内容。

handle_message() ->
    receive
        Msg ->
            handle_message(Msg)
    after 5000 ->
            handle_timeout()
    end.

handle_message(increase) ->
    ...;
handle_message(decrease) ->
    ...;
handle_message(_) ->
    %% Back to receiving loop
    handle_message(). 

你应该防止填充进程邮箱。
在生产就绪的应用程序中,通常没有人使用 receive 语句,他们通常使用一些标准代码,这些代码处理接收、超时、回复、休眠等。我们称这些代码为 behavior,例如 OTP 标准行为之一是 gen_server behavior
因为 OTP 行为是通用的,如果您需要非常高效的代码来执行某些特殊任务,您必须编写名为 Special process 的东西,它应该处理您自己的消息和 Erlang 系统消息。