Приоритетный прием в Эрланге можно легко реализовать следующим образом:
prio() ->
receive
{priority, X} -> X
after 0 ->
receive
X -> X
end
end.
Я читаю статью под названием Priority Messaging made Easy , в которой описывается следующая проблема:
Основная проблема с примером [code] [выше] заключается в том, что мы не учитываем, что при возобновлении оценки из внутреннего блокирующего приема мы можем иметь более одного сообщения в почтовом ящике. В худшем случае все, кроме первого, потенциально огромного количества элементов могут быть приоритетными сообщениями. В этом сценарии мы фактически достигли бы полной противоположности тому, что намеревались сделать.
Я не совсем понимаю.
Вопрос (1): Я предполагаю, что внутренний блокирующий прием будет «вызван» (то есть возобновлен), как только одно сообщение поступит в очередь сообщений, верно? Реально ли предположить, что за короткое время, необходимое для возобновления приема из внутренней блокировки, в очереди уже будет целая куча сообщений?
Вопрос (2): Кроме того, наихудший сценарий описывается как очередь с одним обычным сообщением и большим количеством приоритетных сообщений. Поскольку все пункты приема сначала проверяются по первому сообщению в очереди, а затем по второму сообщению в очереди, ... (источник: эта книга , стр. 69-70) не должно этого be: много обычных сообщений с приоритетным сообщением в конце очереди?