我正在编写一个java程序。如果此进程创建的运行时或线程数增加会影响总cpu实用程序吗?
答案 0 :(得分:0)
我假设您正在执行一项正在执行固定工作量的程序,并且该工作在仅具有一个核心的处理器上执行CPU绑定。
如果您的应用程序具有可以被多线程利用的并行性,那么智能地使用多个线程将增加CPU利用率,从而减少执行时间。例如,如果任务的并行区域在A秒内执行,利用率高于空闲10%,并且它可以支持5个线程,则执行时间变为A / 5秒,CPU利用率增加5倍或者50%。我假设一个CPU绑定任务。对于阻塞任务,您的执行时间可能会减少,而不会影响CPU利用率。
如果您的任务无法利用并行性,那么由于不必要的线程开销,CPU利用率会有一些名义上的增加。
还有其他问题会影响CPU利用率,例如在应用程序执行之前CPU的负载是多少。如果它已经很高,那么多线程可能会引起很多颠簸。另外,如果你的并行块太短,那么就会有线程创建和破坏开销改变方程式。
同样,给定可以并行化的相同任务A,序列化它将增加总运行时间并降低CPU利用率。
请注意,在上述情况下,完成的总工作量是不变的。