Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何避免耗尽较低优先级的工作项源_Algorithm - Fatal编程技术网

Algorithm 如何避免耗尽较低优先级的工作项源

Algorithm 如何避免耗尽较低优先级的工作项源,algorithm,Algorithm,假设您要完成的项目来源具有不同的优先级,并且完成项目的能力总是饱和的。您如何确保较低优先级的项目不会完全耗尽 我想我可以将源的优先级与上次服务后的时间相结合,以获得动态的“有效”优先级。这样,较低优先级的源将缓慢增加,直到它们足够高,可以提供服务 如果这个问题有一个更优雅的解决方案的话,我不想在没有至少询问的情况下重新发明这个轮子。谢谢 你所想的是一个标准的想法,叫做 老化用于确保优先级较低的作业最终完成其执行。此技术可用于减少低优先级任务的饥饿。有许多方法可以实现老化,但都有相同的原则,即当进

假设您要完成的项目来源具有不同的优先级,并且完成项目的能力总是饱和的。您如何确保较低优先级的项目不会完全耗尽

我想我可以将源的优先级与上次服务后的时间相结合,以获得动态的“有效”优先级。这样,较低优先级的源将缓慢增加,直到它们足够高,可以提供服务


如果这个问题有一个更优雅的解决方案的话,我不想在没有至少询问的情况下重新发明这个轮子。谢谢

你所想的是一个标准的想法,叫做

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


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

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

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

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

我已经看到了各种特别的解决方案。我不确定是否有一个规范,但这是一个问题,例如Linux调度程序需要解决,所以可能有很多文献。是的,肯定。我希望避免陷入实现细节(线程调度等)中。看一看可能会有用。你是在寻找解释还是实际的实现?只是一个解释/其他想法,而不是我计划的。Thanks@displayName不知道你为什么删除了你的答案。这正是我想要的。