首页 文章

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

提问于
浏览
1

我有一个可以启动任意数量线程的应用程序,每个线程执行相同的任务:浏览包含5000条消息的向量,然后处理它们中的每一条 .

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

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

如果只有一个线程在运行,则线程花费0.45秒来处理这5000个消息 .

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

如果有更多要处理的消息,比如150,000条消息,则处理时间与运行1个线程或4个线程之间没有区别 .

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

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

我使用Linux 2.6.26进行了测试 . 自2.6.18以来,调度程序已得到改进 . 我也使用2.6.18进行了相同的测试,结果更糟,同时有4个线程运行,证明调度程序确实得到了改进 .

1 回答

  • 1

    线程为IO绑定进程带来了最大的好处 . 但是,根据您描述的设置,性能降低20%可能表明您的线程在某些库/系统调用中遇到争用 .

相关问题