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 系统消息。
我有一个处于循环中并接收命令的进程。
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 系统消息。