Erlang中的空进程邮箱
Posted
技术标签:
【中文标题】Erlang中的空进程邮箱【英文标题】:Empty Process Mail box in Erlang 【发布时间】:2012-08-12 22:45:06 【问题描述】:当你向 shell 进程发送消息时,你可以通过调用:c:flush().
来刷新所有消息
在我看来,这清空了shell进程的邮箱。 清空任何erlang进程邮箱的等效方法是什么?
【问题讨论】:
【参考方案1】:这个函数应该刷新邮箱中的所有消息(在你调用它的任何进程中):
flush() ->
receive
_ -> flush()
after
0 -> ok
end.
【讨论】:
谢谢@stemm。我想知道:after 0 -> ok
不是立即强制进程退出receive
吗?请问您对此有何参考?
据我了解(并在实践中检查),此功能将接收所有现有消息,而邮箱不为空。我在 Francesco Cesarini 的书 Erlang Programming(第 4 段 - 关于并行编程)中阅读了这个技巧
是的,after 0 ->
保证会在“超时”之前尝试匹配邮箱中的所有邮件。它比after 1 ->
更有效,因为实际上不会启动计时器;不需要。以上是关于Erlang中的空进程邮箱的主要内容,如果未能解决你的问题,请参考以下文章