Вы не можете переупорядочивать сообщения в очередях сообщений процесса в Erlang.
Вы можете, однако, делать выборочные приемы, в которых вы можете получить сообщение, которое вы считаете первым наиболее важным. Это не совсем то же самое, но работает для большинства целей.
Вот пример:
receive
{important, Msg} ->
handle(Msg)
after 0 ->
ok
end,
receive
OtherMsg ->
handle(Msg)
end
Отличается от:
receive
{important, Msg} ->
handle(Msg);
OtherMsg ->
handle(Msg)
end
В этом случае он всегда сканирует всю очередь сообщений на наличие {important, Msg}
, прежде чем продолжить обработку остальных сообщений. Это означает, что такие сообщения всегда будут обрабатываться раньше других, если они существуют. Это, конечно, требует некоторой производительности (на сканирование всей очереди уходит больше времени).