要实现功能:读取24个文件里面的内容,存入一个hash表中。(每个文件60多M,hash表里面10万个节点)
一开始使用单线程方式,实现功能用了3秒。
后来本人用多线程模式,创建了24个线程,存入的代码用了互斥锁,最后用了pthread_join()等待24个线程结束,结果实现功能用了9秒!
本人的电脑的CPU是多核的,理论上应该速度至少快1倍才对吧。
一开始使用单线程方式,实现功能用了3秒。
后来本人用多线程模式,创建了24个线程,存入的代码用了互斥锁,最后用了pthread_join()等待24个线程结束,结果实现功能用了9秒!
本人的电脑的CPU是多核的,理论上应该速度至少快1倍才对吧。
解决方案
7
问题是,写文件的速度,跟多线程没关系。原因是即便是多硬盘,还是不能多线程写
哈希表更跟多线程,没关系。
有两个线程,基本上就可以了
最多开四个
除非你的程序在服务器上跑
哈希表更跟多线程,没关系。
有两个线程,基本上就可以了
最多开四个
除非你的程序在服务器上跑
7
io是瓶颈,读写硬盘多线程反而会损失效率
7
开多线程,同步处理没做好,效率会明显降低
19
你这个场景使用多线程能否真的会有提高呢?第一 先说读文件,开24个线程读文件并不能提高 很可能取得反效果,先不说线程切换消耗的时间,单线程切换读不同的文件的时候导致磁盘的磁头需要重新定位消耗的时间就不小,再说你那个写hash表,原因是你用的互斥锁,这意味着线程越多,竞争就越大(假设你每个线程参与了写hash表)锁竞争消耗的时间又是一笔不小的开销。所以很多时候效率和线程数并不是有一个正比的关系。