我在 Erlang 中看到了很多聊天示例,但是列表呢,比如工作队列?如果我想构建一个工作队列系统,比如项目管理系统,是否可以在流程邮箱中重新排序消息,还是必须使用消息优先级?有没有用 Erlang 构建的工作流系统的例子?
John Wright
问问题
1077 次
3 回答
8
您不能在 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}
在继续处理其余消息之前扫描整个消息队列。这意味着这些类型的消息将始终在任何其他消息之前处理,如果它们存在的话。这当然会带来一些性能成本(扫描整个队列两次需要更多时间)。
于 2008-11-03T11:09:24.490 回答
2
进程邮箱对于作业队列来说工作得很好。
只需让您的邮件包含足够的信息,以便易于编写选择性接收模式,并且您不会觉得需要重新排序邮箱内容。
于 2008-11-13T02:04:00.097 回答
2
如果您确实需要重新排序邮件,您可以遵循看门人模式:将邮箱具体化为一个单独的进程。当您的原始进程准备好接收另一条消息时,网守可以根据您选择的任何规则计算要转发的消息。
于 2008-11-13T02:40:29.727 回答