如果我使用线程,时间的百分比改善是多少?

时间:2015-01-09 05:20:54

标签: java multithreading

如果我正在使用线程,那么程序何时完成执行?

假设它现在服用35分钟。如果我将在进程完成执行的时间进行线程化?

减少多少时间?

1 个答案:

答案 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在一般情况下,速度增加。