我在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. 是否有可能在android中创建独立的BroadcastReceiver?
- 2. 是否有可能在同一事务中出队和排队
- 3. Erlang消息队列在进程中是否持久?
- 4. 是否有可能在Android Studio中建立与作为。所以输出
- 5. 是否有可能阻止触摸添加到队列中?
- 6. 是否有可能建立索引标签在顶点
- 7. 是否在WebForms .net中的队列中共享工作?
- 8. Python创建工作队列
- 9. 是否有可能建立一个享有
- 10. 是否有SQL作业队列?
- 11. 是否有可能有两个php框架彼此独立工作?
- 12. Erlang队列问题
- 13. 是否可以在Windows Azure中创建公用队列?
- 14. 是否有可能让isnan()在gfortran -O3 -ffast-math中工作?
- 15. 是否有可能让Java监听多个RabbitMQ队列?
- 16. 是否有可能在UITableView中创建多个列?
- 17. NSOperation队列不能在后台工作
- 18. 是否有可能获得Erlang类型的可接受值列表?
- 19. 是否有可能建立透明画布
- 20. 是否有可能与Bazel建立Unity3D项目?
- 21. 是否有可能建立以下SQL查询
- 22. 是否有可能只建立某些模型?
- 23. 是否有可能检查超链接是否在Excel中工作?
- 24. 是否有可能在sqlite中使用'index'作为列名?
- 25. 是否有可能在Scala中“同步”两个优先级队列?
- 26. 是否有可能在java的开始MQ队列中加载消息
- 27. 是否有可能从Excel 2002工作簿中的所有工作表中返回所有范围的列表?
- 28. 是否有可能建立从XPath的值列表和XML(XSD)的XML文档?
- 29. 是否有可能为Activemq中的不同队列同时拥有kahaDB和memoryPersistenceAdapter?
- 30. 是否有可能在ios和android中用haxe nme建立一个opengl游戏?