我在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. 是否有可能建立透明画布