Я видел много примеров чатов в Erlang, но как насчет списков, как рабочая очередь? Если я хочу создать систему рабочих очередей, например систему управления проектами, можно ли переупорядочить сообщения в почтовом ящике процесса или мне нужно использовать приоритеты сообщений? Есть ли примеры рабочих систем, построенных в Erlang?Возможно ли построить рабочие очереди в Эрланге?
ответ
Вы не можете изменять порядок сообщений в очереди сообщений процесса в 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}
, прежде чем продолжить обработку остальных сообщений. Это означает, что такие сообщения всегда будут обрабатываться перед любыми другими, если они существуют. Разумеется, это связано с некоторыми издержками (требуется больше времени на просмотр всей очереди).
Обработка почтовых ящиков работает хорошо, как есть для очередей заданий.
Просто укажите, что ваши сообщения содержат достаточную информацию, чтобы выборочные шаблоны приема были легко писать, и вы не почувствуете необходимости переупорядочивать содержимое почтового ящика.
Если вам необходимо изменить порядок сообщений, вы можете следовать шаблону гейткипера: восстановить почтовый ящик как отдельный процесс. Когда ваш исходный процесс готов к другому сообщению, гейткипер может вычислить, какое сообщение пересылать, любым выбранным вами правилом.
- 1. Может ли CUDA обрабатывать собственные рабочие очереди?
- 2. Python, создающий рабочие очереди
- 3. Рабочие очереди Akka.Net
- 4. RabbitMQ - объединить рабочие очереди и очереди маршрутизации
- 5. динамические задачи или рабочие очереди
- 6. Возврат запросов NACKed в рабочие очереди RabbitMQ
- 7. Возможно ли/возможно построить широкомасштабное приложение Flex?
- 8. Возможно ли построить lazy_conditional metafunction
- 9. Возможно ли размещать данные в очереди?
- 10. Дженкинс - Put построить в очереди
- 11. Рабочие потоки libuv или проверка работоспособности очереди?
- 12. Возможно ли построить график гистограммы в xamarin
- 13. Возможно ли построить график в TesorFlow?
- 14. Возможно ли построить карту в агрегации MongoDB?
- 15. Возможно ли построить встроенные дженерики в Swift?
- 16. рабочие очереди и рамки непрерывного развертывания
- 17. Не удалось выполнить рабочие очереди и прерывания
- 18. Resque Рабочие работают на той очереди
- 19. Использование zepto, возможно ли очереди анимации?
- 20. Может ли Циркулярные списки задаваться в Эрланге?
- 21. Имитация набора самолетов в Эрланге
- 22. Рекурсия хвоста в Эрланге
- 23. Возможно ли построить «подвальный шкаф» проекта Maven?
- 24. Возможно ли построить двоичный пакет с poky?
- 25. Возможно ли построить пустое сообщение из дескриптора?
- 26. Возможно ли построить Thread на Global.asax
- 27. Возможно ли построить приложение Cordova онлайн?
- 28. Возможно ли построить JNI .dll под Linux?
- 29. Возможно ли построить дерево из списка?