Я думал, что хотел бы иметь возможность назначать разные сообщения разным приоритетам при общении с процессом эрланга.
Я хотел бы иметь возможность сначала обрабатывать сообщения с высоким приоритетом, а затем один раз с низким приоритетом.
Я пробовал разные подходы, подход 1:
loop() ->
receive
{high, Msg} ->
Do something with the message,
loop()
after 0 ->
ok
end,
receive
{low, Msg} ->
Do something with the message,
loop()
after 0 ->
loop()
end.
Это делает работу, но тихо медленно. Я полагаю, что получатель должен просмотреть все сообщения, чтобы увидеть, есть ли сообщение «high» при каждом запуске.
Подход 2:
Я также попытался использовать подход типа посредника, когда сообщение сначала было установлено на «передний стол», «передний стол», затем отправляло сообщение либо в верхнюю, либо в низкую очередь, а затем, наконец, Рабочий поток запросил задания у первой очереди высокой очереди, а если в этой очереди ничего нет, то из низкой очереди, как показано здесь:
У этого недостатка было необходимость ждать, пока запрос не попадет в начало разных очередей, возможно, сработала бы какая-то система приоритетов: -)
Есть ли более разумный способ сделать что-то подобное?