我一直在想,我希望能够在与 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.
这可以完成工作,但是速度很慢。我想接收方必须查看所有消息,看看每次运行时是否有“高”消息。
方法2:
我还尝试过采用中介者类型的方法,其中消息首先设置为“前台”,“前台”然后将消息发送到高队列或低队列,最后发送到“工作人员”线程首先从高队列请求作业,如果该队列没有任何内容,则从低队列请求作业,如下所示:
这样做的缺点是必须等待请求到达不同队列的前面,也许某种优先级系统可以工作:-)
有没有更聪明的方法来做这样的事情?
我认为这篇论文回答了你的问题:
https://www.erlang-solutions.com/upload/docs/9/erlang11-nystrom.pdf https://www.erlang-solutions.com/upload/docs/9/erlang11-nystrom.pdf
基本上您希望收到如下信息:
receive
{hi_priority, Msg} -> Msg
after 0 ->
receive
Msg -> Msg
end
end
正如Erlang的文档所说,“after 0”意味着如果邮箱中没有匹配(优先级)的消息,超时将立即发生。
我不知道有什么更聪明的方法:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)