You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何计算多线程并行处理任务集的总耗时?

计算X线程并行处理任务集的总预期耗时

嘿,这个问题拆解开来其实挺清晰的,咱们基于线程无额外调度开销、任务能被最优分配的前提,分两种核心情况来分析:

一、任务集大小 ≤ 线程数X

这种情况确实简单——每个任务都能直接分配到一个独立线程,所有任务同时启动处理。所以处理完所有任务的总耗时,就是所有任务里耗时最长的那一个

举个例子:如果有3个线程,任务耗时分别是[2,5,3],那总耗时就是5。三个线程同时跑,最慢的那个任务完成时,其他任务早就处理完了,整个任务集也就搞定了。

二、任务集大小 > 线程数X

这时候得结合两个关键数值来判断最终总耗时:

  • 所有任务的总耗时总和除以线程数X,得到理想状态下的平均处理时间(假设任务能拆分的话)
  • 单个任务的最长耗时

最终的总耗时就是这两个数值里的较大者,公式可以写成:
总耗时 = max( max(t(T[i])), sum(t(T[i])) / X )

用两个例子来理解逻辑:

  1. 比如有2个线程,任务耗时是[6,3,3]:总耗时总和是12,除以2得6;单个最长任务也是6。这时候一个线程跑那个6的任务,另一个线程先后跑两个3的任务,刚好同时完成,总耗时就是6。
  2. 再比如有2个线程,任务耗时是[7,2,2]:总耗时总和是11,除以2得5.5,但单个最长任务是7。这时候不管怎么分配,那个7的任务得占一个线程跑满7单位时间,另一个线程在这段时间里早就把两个2的任务处理完了,所以总耗时只能是7。

简单总结:如果有单个任务比“平均分摊到每个线程的总耗时”还长,那这个任务的耗时就是瓶颈;否则,平均分摊的时间就是总耗时。

内容的提问来源于stack exchange,提问作者user3237736

火山引擎 最新活动