如何避免使较低优先级的工作项源匮乏

时间:2017-02-07 19:30:46

标签: algorithm

假设您有完成不同优先级的项目来源,并且完成项目的能力始终是饱和的。您如何确保优先级较低的项目不会完全缺乏?

我想我可以将源的优先级与自上次服务以来的时间结合起来,以提出动态的“有效”优先级。这样,较低优先级的源将慢慢升高,直到它们足够高以便进行服务。

我不想在没有至少询问的情况下重新发明轮子,以防存在更优雅的解决方案。谢谢!

1 个答案:

答案 0 :(得分:3)

您所考虑的是一个标准的想法,称为Aging

  

老化用于确保优先级较低的作业最终完成执行。该技术可用于减少低优先级任务的饥饿。有许多方法可以实现老化,但所有方法都具有相同的原则,即在准备队列中等待进程的优先级应该增加。优先级的增加可能等于或不等于过程的等待时间。

您当前的想法是为流程分配优先级。通常,您可以通过将所有进程置于最小(或最大,取决于您的实现)堆,然后轮询堆...

或者,您可以将流程分配给优先级。您可以通过保留每个优先级类型的多个队列/列表(最高,最高,中,低,最低等)来实现。

  • 保留每种类型的多个队列;
  • 从最高优先级列表中获取项目并完成它或以循环方式为每个高优先级进程分配时间量;
    • 如果提供了高优先级列表中的所有进程,则从较低优先级开始提供服务进程,直到再次向更高优先级列表添加某些进程;
  • 当优先级较低的任何进程等待时间过长时,请将其从该优先级列表中删除,并将其添加到下一个更高优先级。

这也是操作系统中教授的标准算法。