【发布时间】:2013-01-16 00:11:15
【问题描述】:
我一直在想,在与 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.
这可以完成工作,但速度很慢。我猜接收端必须查看所有消息,以查看每次运行时是否有“高”消息。
方法二:
我也尝试过使用中介类型的方法,首先将消息设置为“前台”,然后将消息发送到高队列或低队列,最后是'worker' 线程首先从高队列请求作业,如果该队列没有任何内容,则从低队列请求作业,如下所示:
这样做的缺点是必须等待请求到达不同队列的前面,也许某种优先级系统会起作用:-)
有没有更聪明的方法来做这样的事情?
【问题讨论】:
标签: erlang