我一直在想,在与erlang进程对话时,我希望能够为不同的消息分配不同的优先级。
我希望能够先处理高优先级的消息,然后再处理低优先级的消息。
我尝试过不同的方法,方法1:
loop() ->
receive
{high, Msg} ->
Do something with the message,
loop()
after 0 ->
ok
end,
receive
{low, Msg} ->
Do something with the message,
loop()
after 0 ->
loop()
end.这可以完成这项工作,但速度非常慢。我猜receive每次运行时都要查看所有的消息,看看是否有“高”消息。
方法2:
我还尝试了一种中介器类型的方法,首先将消息设置为“前台”“前台”,然后将消息发送到高队列或低队列,最后一个“工作”线程从高队列的firsk请求作业,如果该队列没有作业,则从低队列请求作业,如下图所示:

这有一个缺点,那就是必须等待请求到达不同队列的前面,也许某种优先级系统可以工作:-)
有没有更聪明的方法来做这样的事情?
发布于 2012-01-02 18:23:46
我认为这篇论文回答了你的问题:
https://www.erlang-solutions.com/upload/docs/9/erlang11-nystrom.pdf
基本上,你希望有一个如下的接收器:
receive
{hi_priority, Msg} -> Msg
after 0 ->
receive
Msg -> Msg
end
end正如Erlang的文档所说,“在0之后”意味着如果邮箱中没有匹配的(优先级)消息,超时将立即发生。
我不知道有什么更聪明的方法来做这件事:)
https://stackoverflow.com/questions/8699498
复制相似问题