【发布时间】:2010-10-31 21:28:09
【问题描述】:
Erlang 中的优先接收可以很容易地实现如下:
prio() ->
receive
{priority, X} -> X
after 0 ->
receive
X -> X
end
end.
我正在阅读 Nyström 的一篇名为 Priority Messaging made Easy 的论文,其中描述了以下问题:
[代码]示例[上面]的主要问题是,我们没有考虑到当从内部阻塞接收恢复评估时,邮箱中可能有不止一条消息。在最坏的情况下,除了第一个(可能是大量的)元素之外的所有元素都可能是优先消息。在这种情况下,我们实际上会完成与我们打算做的完全相反的事情。
我不完全明白。
问题 (1):我假设一旦 一个 消息到达消息队列,内部阻塞接收将被“调用”(即恢复),正确的?假设在从内部阻塞接收恢复所需的短时间内,队列中已经有一大堆消息在等待,这是否现实?
问题(2):此外,最坏的情况被描述为一个队列,其中包含一条普通消息和许多优先级消息。由于所有接收子句首先检查队列中的第一条消息,然后检查队列中的第二条消息,...(来源:book,第 69-70 页)不应该是:很多队列末尾有优先级消息的普通消息?
【问题讨论】:
标签: erlang priority-queue