我在Erlang看過很多聊天的例子,但是像列表中的工作隊列呢?如果我想構建一個工作隊列系統,就像項目管理系統一樣,是否可以在流程郵箱中重新排序郵件,還是必須使用郵件優先級? Erlang中有工作流系統的例子嗎?是否有可能在Erlang中建立工作隊列?
4
A
回答
7
您不能在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
進程郵箱對於作業隊列非常有效。
只要你的信息包含足夠的信息,以便選擇性接收模式很容易編寫,你不會覺得需要重新排序郵箱內容。
1
如果您確實需要重新排序消息,則可以遵循關守模式:將郵箱作爲單獨的進程進行重新定義。當您的原始流程準備好接收其他消息時,網守可以根據您選擇的任何規則計算要轉發的消息。
相關問題
- 1. 是否有可能建立一個目標在ios上工作4 5 6
- 2. 是否有可能直接在Spark工作中創建變量?
- 3. 是否有可能建立與小工具
- 4. 是否有可能將列表轉換爲Python中的隊列?
- 5. 是否有可能在android中創建獨立的BroadcastReceiver?
- 6. 是否有可能在同一事務中出隊和排隊
- 7. 是否有可能建立在工具欄中的圖標firebreath插件
- 8. Erlang消息隊列在進程中是否持久?
- 9. 是否有可能在Android Studio中建立與作爲。所以輸出
- 10. 是否有可能阻止觸摸添加到隊列中?
- 11. 是否有可能建立在Android的支持畫布文件?
- 12. 是否有可能建立索引標籤在頂點
- 13. 是否在WebForms .net中的隊列中共享工作?
- 14. 是否有可能建立一個享有
- 15. 是否有可能只獲得本地和別名隊列的隊列名稱?
- 16. 是否有可能立刻露出DataGridComboBoxColumn?
- 17. Python創建工作隊列
- 18. 是否有SQL作業隊列?
- 19. 是否有可能有兩個php框架彼此獨立工作?
- 20. 是否可以在Windows Azure中創建公用隊列?
- 21. Erlang隊列問題
- 22. 是否有可能讓isnan()在gfortran -O3 -ffast-math中工作?
- 23. 是否有可能使隊列ThreadPoolTaskExecutor類持久
- 24. 是否有可能讓Java監聽多個RabbitMQ隊列?
- 25. 是否有可能在Dart中創建地圖列表?
- 26. 是否有可能在UITableView中創建多個列?
- 27. 是否有可能獲得Erlang類型的可接受值列表?
- 28. NSOperation隊列不能在後臺工作
- 29. 是否有可能只建立某些模型?
- 30. 是否有可能建立透明畫布