我在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}
然后继续处理其余消息.这意味着这些类型的消息将始终在任何其他消息之前处理(如果存在).这当然是在一些性能成本(扫描整个队列两次需要更多时间).