【问题标题】:Scheduling tasks in near future近期任务安排
【发布时间】:2013-06-07 04:23:11
【问题描述】:

问题是关于安排任务。假设,在任何时候都有新任务出现,并且需要在未来解决。此外,我们没有关于安排其他任务的确切时间的信息,但我们知道在接下来 x 小时内安排的任务数量。

简单的解决方案是将其安排在当前时间。在这种情况下,可能会发生这样的情况:已经有太多待处理的任务,导致任务执行延迟。所以,我们需要把它放在未来,这样任务执行的延迟就不是问题了。另外,同时我确实有一个时间上限,它指定新任务必须在指定的期限内执行。

所以,简而言之,问题是,我们应该如何安排传入的新任务,以便 -

i) 任务不会有太多延迟。

ii) 任务在指定期限内执行。

假设所有任务具有相同的优先级和相同的截止日期值来满足。因此遵循先到先得的技术。

【问题讨论】:

    标签: algorithm job-scheduling


    【解决方案1】:

    解决方案:

    1. 为每个任务指定优先级。每当有更高优先级的任务进入作业队列时,当前正在执行的低优先级任务将被抢占,更高优先级的任务将在自己的时间间隔内执行。但在这个实现过程中还有另一个逻辑,这样低优先级的任务就不会长时间被饿死。

    2. 根据每个任务的指定时间上限,使用缓冲区/后备存储将任务与作业队列中的另一个交换。如果当前正在运行的任务剩余时间较少,则应该运行它直到完成。否则,它可以与具有最小时间上限的传入任务交换。

    【讨论】:

    • 假设所有任务具有相同的优先级和相同的截止日期。因此,需要先到先得的方法。但是问题在于新任务,我们需要在这个时间点进行调度,这样就不会发生已经有太多任务在运行从而导致延迟的情况,但同时要赶上截止日期并及时被选中。
    • 可以为新任务分配比其余任务更高的优先级。调度器会自动把它捡起来放到作业队列的前面。
    【解决方案2】:

    听起来您真的不想使用调度机制,而是使用作业队列。作业完成后,您将开始队列中的下一个作业。如果队列为空,您将处于空闲状态,直到有作业要运行。如果您有多个 CPU 内核,或者并行运行作业还有其他好处,您可以使用计数器来了解您当前正在运行多少作业。

    【讨论】:

    • 假设队列永远不会变空,导致新任务永远不会被拾取。这将导致超出任务期限。
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多