Erlang 中的优先接收可以很容易地实现如下:

prio() ->
  receive
    {priority, X} -> X
  after 0 ->
    receive
      X -> X
    end
  end.
我正在阅读 Nyström 的一篇名为 Priority Messaging made Easy 的论文,其中描述了以下问题:

我不完全明白这一点。
问题(1):我假设一旦 一个 消息到达消息队列,内部阻塞接收将被“调用”(即恢复),对吗?假设在从内部阻塞接收恢复所需的短时间内,队列中已经有一大堆消息在等待是否现实?
问题 (2):此外,最坏的情况被描述为一个队列,其中包含一条普通消息和许多优先级消息。由于所有接收子句首先针对队列中的第一条消息进行检查,然后针对队列中的第二条消息进行检查,...(来源:this book,第 69-70 页)这不应该是:很多正常队列末尾的消息是优先消息?

最佳答案

Erlang 是一种完全并发的语言,没有理由不能同时发送多条消息。沿着“哦,这很快——其他线程不太可能在那么短的时间内做一些冲突的事情”的假设与闭上眼睛说“没有竞争条件这样的事情,有没有比赛条件之类的东西……”

关于Erlang:优先接收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/960016/

10-12 07:28