繁体   English   中英

是否可以在Erlang中构建工作队列?

[英]Is it possible to build work queues in Erlang?

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

进程邮箱与作业队列一样工作得很好。

只需让您的消息包含足够的信息,以便易于编写选择性接收模式,并且您不需要重新订购邮箱内容。

如果确实需要重新排序邮件,则可以遵循网守模式:将邮箱作为单独的进程进行更新。 当您的原始进程准备好发送另一条消息时,网守可以根据您选择的任何规则计算要转发的消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM