Erlang: куда идет непревзойденное сообщение?

Когда я пытался отправить несоответствующее сообщение порожденному процессу в оболочке erlang, я ожидал, что сообщение должно остаться в почтовом ящике, но мне показалось, что почтовый ящик пуст, почему?

Erlang R15B02 (erts-5.9.2) [smp:2:2] [async-threads:0]
Eshell V5.9.2  (abort with ^G) 
1> Pid = spawn(fun()->receive stop->stop end end).
<0.33.0>
2> Pid ! msg.
msg
3> erlang:process_info(Pid, messages).
{messages,[]} %% where is the msg?

person wudeng    schedule 05.06.2013    source источник
comment
Вы правы, у меня та же проблема, что и у вас.   -  person BlackMamba    schedule 08.06.2013


Ответы (2)


Если сообщение не может быть сопоставлено с шаблоном получения, оно перемещается из почтового ящика в очередь сохранения, см. http://ndpar.blogspot.se/2010/11/erlang-explained-selective-receive.html для подробного объяснения того, что происходит. .

Параметр messages для process_info/2 показывает только содержимое почтового ящика, насколько я знаю, нет возможности проверить содержимое очереди сохранения.

person johlo    schedule 05.06.2013

Сообщение, конечно же, есть, и оно будет проверено при последующих приемах. Тот факт, что вы не можете видеть это с erlang:process_info(Pid, messages), на мой взгляд, странно.

person aronisstav    schedule 05.06.2013