我有一个可以启动任意数量线程的应用程序,每个线程执行相同的任务:浏览包含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个线程运行,证明调度程序确实得到了改进。
答案 0 :(得分:1)
线程为IO绑定进程带来了大部分好处。但是,根据您所描述的设置,性能降低20%可能表明您的线程在某些库/系统调用中遇到了争用。