更多的线程,即使有足够的CPU核心,速度也会变慢

我有一个应用程序可以启动任意数量的线程,每个线程都执行相同的任务:通过一个包含5000条消息的向量,然后处理每个线程他们。更多的线程,即使有足够的CPU核心,速度也会变慢

线程之间,没有资源竞争,根本没有竞争条件。并且在我运行我的应用程序的盒子上有4个cpu核心。当我运行我的应用程序时,没有其他进程正在执行任何CPU消耗任务。

但是,我得到的结果如下。

如果只有一个线程正在运行,则需要线程0.45秒来处理这些5000条消息。

如果有4个线程在运行,每个线程花费大约0.55秒来处理这些消息,增加20%以上。

如果有更多的消息要处理,比如说150,000条消息,那么在运行1个线程或4个线程的处理时间之间没有区别。

我不明白是什么导致时间增加,而有4个线程运行,有4个CPU核心,足够4线程。

为什么没有时间增加而处理时间更长?

我做了我的测试使用Linux 2.6.26。自2.6.18以来,调度程序得到了改进。我也使用2.6.18进行了相同的测试,结果更糟,而有4个线程正在运行,这证明调度程序所做的改进。

回答:

线程为IO绑定进程带来了大部分好处。但是,如果设置中描述的性能降低20%,则可能表示您的线程正在进行某些库/系统调用的争用。

以上是 更多的线程,即使有足够的CPU核心,速度也会变慢 的全部内容, 来源链接: utcz.com/qa/258113.html

回到顶部