我在Erlang中看过很多聊天示例但是列表如工作队列呢?如果我想构建一个工作队列系统,比如项目管理系统,是否可以在进程邮箱中重新排序消息,还是必须使用消息优先级?是否有使用Erlang构建的工作流系统的示例?
答案 0 :(得分: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)
进程邮箱在作业队列中的运行状况非常好。
让您的邮件包含足够的信息,以便易于编写选择性的接收模式,并且您不需要重新订购邮箱内容。
答案 2 :(得分:1)
如果确实需要重新排序邮件,可以按照网守模式进行操作:将邮箱作为单独的进程进行更新。当您的原始进程准备好发送另一条消息时,网守可以根据您选择的任何规则计算要转发的消息。