C++: 为什么我设计的多线程并没有比单线程快?求解答

要处理一个很大的数组(约有3千万个元素), 结果是返回一个大约4千万个元素的vector, 所以决定用多线程, 每个线程处理一段,为了提高效率, 没有使用锁, 而是将每个线程的结果存在一个零时vector里, 等全部线程完成后, 在把这几个临时的vector合并成一个大的vector, 即最终结果。

对比了 单线程, 2线程, 4线程和8线程, 感觉还是单线程最快, 为什么呀, 想不明白? 注: 所有的操作都是在内存中完成, 没有IO的操作。

1 根据cpu核个数来创建对应的线程
2 最后vector合并很耗时的,感觉时间消耗在这了

应该是合并耗时太大了,计算输出一下耗时,看看那个地方可以优化

可能是vector的效率比较低

根据你的cpu来合理分配线程
多线程不一定是最优解的
比如你的cpu是4核并且很好的算力那么推荐开启核心数乘n(n看程序的复杂度)
我做过实验 我的是8核 最有是16线程 默认是14线程
如果你算这么大的数组那一个线程都不够
就是算不过来了(并且多线程之间会来回切换,更加费时)
所以单线程比多线程快

cpu切换时间片耗时