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

Joh*_*ght 4 erlang workflow

我在Erlang中看过很多聊天示例但是列表如工作队列呢?如果我想构建一个工作队列系统,比如项目管理系统,是否可以在进程邮箱中重新排序消息,还是必须使用消息优先级?是否有Erlang内置的工作流系统示例?

Ada*_*erg 7

您无法在Erlang中重新排序进程消息队列中的消息.

但是,您可以选择接收,您可以先收到您认为最重要的信息.它并不完全相同,但适用于大多数用途.

这是一个例子:

receive
    {important, Msg} ->
        handle(Msg)
after 0 ->
    ok
end,
receive
    OtherMsg ->
        handle(Msg)
end
Run Code Online (Sandbox Code Playgroud)

它不同于:

receive
    {important, Msg} ->
        handle(Msg);
    OtherMsg ->
        handle(Msg)
end
Run Code Online (Sandbox Code Playgroud)

因为它将始终扫描整个消息队列,{important, Msg}然后继续处理其余消息.这意味着这些类型的消息将始终在任何其他消息之前处理(如果存在).这当然是在一些性能成本(扫描整个队列两次需要更多时间).