首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种聪明的方法可以让消息具有不同的优先级?

有没有一种聪明的方法可以让消息具有不同的优先级?
EN

Stack Overflow用户
提问于 2012-01-02 17:59:48
回答 1查看 578关注 0票数 7

我一直在想,在与erlang进程对话时,我希望能够为不同的消息分配不同的优先级。

我希望能够先处理高优先级的消息,然后再处理低优先级的消息。

我尝试过不同的方法,方法1:

代码语言:javascript
复制
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请求作业,如果该队列没有作业,则从低队列请求作业,如下图所示:

这有一个缺点,那就是必须等待请求到达不同队列的前面,也许某种优先级系统可以工作:-)

有没有更聪明的方法来做这样的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-02 18:23:46

我认为这篇论文回答了你的问题:

https://www.erlang-solutions.com/upload/docs/9/erlang11-nystrom.pdf

基本上,你希望有一个如下的接收器:

代码语言:javascript
复制
receive
  {hi_priority, Msg} -> Msg
after 0 ->
  receive
    Msg -> Msg
  end
end

正如Erlang的文档所说,“在0之后”意味着如果邮箱中没有匹配的(优先级)消息,超时将立即发生。

我不知道有什么更聪明的方法来做这件事:)

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8699498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档