众所周知,优先级队列可以以最简单的形式为较低优先级的项目创建饥饿。例如,假设优先级队列中的以下项目按优先级递增顺序排列:
Item Priority
--------------------
Item A 0 //Lowest priority
Item B 1
Item C 2
Item D 3
Item E 4 //Highest priority
现在,如果我们在优先级队列(B-E)中收到具有更高优先级的一致的项目流,我们可能永远不会处理较低优先级的数据包(A)。我想知道有哪些算法来处理这个问题?
我想到的一个简单方法是根据优先级限制不同项目类型的处理。例如,我们将每种类型的数据包处理限制为2 ^ priority
。因此,对于上表,在处理了Item E
类型的16项后,我们最多可处理8个Item D
类型的项目,最多4个Item C
项,最多2个Item B
项在开始再次处理Item A
之前,最多1个Item E
。这将防止不同项目类型的饥饿。
这是一个简单的方法,但我想知道是否有其他着名的算法来解决这个问题。想要更好的算法或解决方案吗?