如果我正在使用线程,那么程序何时完成执行?
假设它现在服用35分钟。如果我将在进程完成执行的时间进行线程化?
减少多少时间?
答案 0 :(得分:3)
它完全取决于您在整个程序中与其并行化的部分,以及程序中的算法如何使其自身具有并行可计算性。有一句老话One woman can have a baby in nine months, but nine woman cannot have the same baby in one month
,也就是说"并非所有算法都能有效地并行计算,而I / O就是一个很好的例子。
Amdahl的法律规定,具有n
个线程的程序和程序的B
部分的整体加速仍为串行:
1
--------------------------
B + ( (1 / n) (1 - B) )
这个等式告诉我们的是,即使程序的一部分的infinite
加速仅影响该部分。 例如:
假设一个程序有一个函数Foo
,它有助于并行运行。分析后,您会发现您的程序在Foo
方法调用中花费了其总运行时间的25%。这意味着即使你能够无限制地加速程序的这一部分,你的程序也只会快33%(1 / 0.75)。
但是,当然,你无法通过线程无限加速程序的任何部分,你可以更多地打破工作。 你必须记住,创建/同步线程有开销,所以即使有20个线程,你也不会获得20倍的加速。
但是,为了回答您的原始问题,我们假设您的整个程序可以并行运行。
如果您要在n
个帖子中将工作分开均匀,我通常会发现由于锁定,同步和争用,您通常会获得0.6 * n
在一般情况下,速度增加。