我只是有一个简单的问题,我似乎无法找到答案.基本上我的问题是,如果我有一个功能记录状态(递归),我发送多个消息,它会继续通过接收块,直到它的"邮箱"中不再有消息?
state(Fridge) ->
receive
Pat1 ->
io:format("ok"),
state(S);
Pat2 ->
io:format("not ok"),
state(S)
end.
Run Code Online (Sandbox Code Playgroud)
因此,如果我使用"!"向此过程发送3条消息(Pat1,Pat2,Pat1)并且它在接收消息之前无法进入其循环,它是否仍会打印出以下内容?
1> "ok"
2> "not ok"
3> "ok"
Run Code Online (Sandbox Code Playgroud)
对不起,如果不是很清楚,通过简化问题可能会很难描绘出我的要求.
你的问题不明确,但你似乎在问这个过程是否会收到三条消息,即使它们是在目标进程调用之前发送的receive- 如果这是问题,答案是肯定的.当您向进程发送消息时,它会进入该进程的消息队列,直到进程调用receive将其从消息队列中删除并处理它.
如果您调用接收者的进程ID erlang:process_info(Pid, messages)在哪里Pid,您可以看到其队列中有哪些消息.您可以从Erlang shell中尝试这个.
作为消息排队的一个极端例子,在某些重负载条件下,如果接收器无法跟上快速发送器,它可能成为内存不足问题的根源.在这些条件下,接收者的消息队列可能会无限制地增长,直到系统内存不足.
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |