windows VS2015 多线程编程 线程池

Calarence 2018-12-15 03:38:44
问题:遍历一个文件夹后得到100组文件,每组文件的数目不一样;现在要对这100组文件进行处理,因此写了一个线程函数来处理一组文件,在主线程中开启了100个这样的线程来处理这一100组文件,发现单线程实现的消耗时间比开启100个线程所消耗的时间要短(只有两分钟,多线程的8分钟)。网上查询说是线程开销,上下文切换消耗比较大。

疑问:多核的环境中,开启这么多线程,效率更低了?
针对想用多个线程来实现并发读取文件的功能,有什么思路可以指导?
...全文
809 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2019-01-31
  • 打赏
  • 举报
回复
引用 楼主 Calarence 的回复:
问题:遍历一个文件夹后得到100组文件,每组文件的数目不一样;现在要对这100组文件进行处理,因此写了一个线程函数来处理一组文件,在主线程中开启了100个这样的线程来处理这一100组文件,发现单线程实现的消耗时间比开启100个线程所消耗的时间要短(只有两分钟,多线程的8分钟)。网上查询说是线程开销,上下文切换消耗比较大。

疑问:多核的环境中,开启这么多线程,效率更低了?
针对想用多个线程来实现并发读取文件的功能,有什么思路可以指导?


根据经验,线程数约等于2倍的CPU内核数比较合适,更多的线程效率更低
赵4老师 2019-01-30
  • 打赏
  • 举报
回复
在文件大小相同的前提下:
读刚读过的文件比头次读没读过的文件快
读转速快的硬盘上的文件比读转速慢的硬盘上的文件快
读没有磁盘碎片的文件比读有磁盘碎片的文件快
读文件不处理比边读边处理快
单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上)
读固态硬盘上的文件比读普通硬盘上的文件快
牧童吃五谷 2019-01-29
  • 打赏
  • 举报
回复
单线程读写硬盘,多线程处理内存数据,线程数量不要超过CPU逻辑处理器数量
Eleven 2019-01-25
  • 打赏
  • 举报
回复
线程太多的话,系统内核花在线程切换的开销就会大,耗时也会多,真正留给线程工作的时间可能会很少。
cow888 2019-01-25
  • 打赏
  • 举报
回复
对处理大规模并发线程,用工作站或服务器,才有好的表现
cow888 2019-01-25
  • 打赏
  • 举报
回复
用E5-2680v2 CPU 2个再加上PCIE SSD你就知道,装备多少重要,不到10s完成任务
tiger波波 2019-01-08
  • 打赏
  • 举报
回复
你几个CPU啊,100个线程分配CPU了吗?如果是4核的,一个核分25个线程试试?
zgl7903 2019-01-07
  • 打赏
  • 举报
回复
最好是将文件先全部读入再做处理,
如果资源不够 减少读写文件的次数, 每次读入尽可能多的数据

不说害怕 2019-01-06
  • 打赏
  • 举报
回复
有办法优化的. 首先一个线程(主线程), 把数据读取到内存(全部文件的全部数据, 内存要大哦!), 然后开多线程在内存处理!把任务分配给新开的多个线程. 但多线程不宜过多! 要根据CPU内核数或者超线程线程数量来. 可以是CPU内核数量的两三倍. 然后线程优先级处理. 看看是否效果会好一点的.
encoderlee 2018-12-16
  • 打赏
  • 举报
回复
CPU密集型的任务才适合多线程,IO密集型的任务,多线程没有帮助
smwhotjay 2018-12-15
  • 打赏
  • 举报
回复

因为你硬盘并发不行嘛。开10个 100个 1000个 效果也许更差。

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧