【发布时间】:2018-04-08 17:09:02
【问题描述】:
我有一组任务,我们称之为T[],其中每个任务T[i] 需要一定的时间t(T[i]) 来处理。这些任务由X线程并行处理(这并不是说多个线程在一个任务上协同工作,而是多个任务由多个线程处理,每个线程执行一个任务,然后执行下一个任务, ETC)。
现在我想计算处理所有任务所需的预期总时间。当然只要size(T[]) <= X就很简单(即任务数小于等于线程数),这种情况下总时间等于最慢任务的时间。
但我对X < size(T[]) 的情况感到很困惑(即我的线程比任务少)。如何以一种优雅的方式计算?
编辑:根据评论员的要求,我们可以假设任务队列按运行时间最长的任务在前排序,运行时间最短的任务在后。此外,我们可以假设任务之间没有暂停,我们也可以忽略 OS 调度程序正在做什么。
【问题讨论】:
-
答案取决于调度算法。例如,如果您有 4 个持续时间为 10 秒的作业和一个持续时间为 100 秒的作业和 4 个线程,则如果调度程序将前 4 个每个 10 秒的作业作为第一组,然后在其上运行 100 秒的作业,则持续时间将为 110 秒。在第二轮拥有。如果调度器先按最长作业排序,则持续时间为 100 秒。
-
对,我忘了添加这个信息。我已经更新了帖子。所以我知道任务会按照运行时间最长到运行时间最短的顺序进行处理,但我仍然不知道如何计算。
-
您说的是“预期”时间,但从描述来看,调度似乎是确定性的。如果它确实是确定性的,并且下一个任务分配给最早的空闲线程,那么很容易模拟。如果它不是确定性的,则需要编辑问题以解释不确定性的来源。
-
是的,请参阅我自己编辑的答案。我实际上最终模拟了它。它不是超级准确,但我的测试表明它足够准确。例如,我进行了一次跑步,估计需要 8 分钟,结果花了 9 分钟。我认为我对模拟的回答是正确的,但我不能接受自己的回答
标签: multithreading algorithm math parallel-processing