好的,我知道我需要投入 2 美分。根据作者的回答,我猜“优先接收”技术正是这里所需要的。可以在“ Erlang: priority receive question here at SO ”中找到讨论。这个想法是首先接受高优先级的消息,并且仅在没有高优先级的消息时才接受其他消息。
由于 Scala Actor 与 Erlang 非常相似,因此实现它的简单代码如下所示:
def act = loop {
reactWithin(0) {
case msg: HighPriorityMessage => // process msg
case TIMEOUT =>
react {
case msg: HighPriorityMessage => // process msg
case msg: LowPriorityMessage => // process msg
}
}
}
这工作如下。演员有一个带有消息的邮箱(队列)。( receive
or receiveWithin
) 参数是一个偏函数,Actor 库在邮箱中查找可应用于此偏函数的消息。在我们的例子中,它只是一个对象HighPriorityMessage
。因此,如果 Actor 库找到这样的消息,它会应用我们的部分函数并且我们正在处理高优先级的消息。否则,reactWithin
使用超时 0 调用带有参数的部分函数,TIMEOUT
我们立即尝试处理队列中任何可能的消息(因为它等待消息,我们无法排除获取的可能性HighPriorityMessage
)。