多线程的文件读写实际上比标准的同步读写要慢,为什么?

临风ivy 发布于 03/14 14:03
阅读 662
收藏 0

该问题在stackoverflow上的描述:https://stackoverflow.com/q/49251486/6652192

第二段代码比第一段代码要慢8s左右,第二段代码连续提交了2000个写请求给Windows。windows会开启多个线程进行写操作,完成后再通知应用程序。按理说多线程执行比单线程执行快,但事实却相反,为什么?

加载中
0
d
dwcz

这问题太傻了。线程多有屁用,总线只有一个或两个,硬盘只有一个读写接口,内存每次只能写一个区域。所以,并行只能在多通道中才能体现出优势。高速单通道的环境只能利用空闲时间模拟并行,本质还是串行,不会快过串行。

0
临风ivy
临风ivy

引用来自“dwcz”的评论

这问题太傻了。线程多有屁用,总线只有一个或两个,硬盘只有一个读写接口,内存每次只能写一个区域。所以,并行只能在多通道中才能体现出优势。高速单通道的环境只能利用空闲时间模拟并行,本质还是串行,不会快过串行。

精辟,谢谢回答,对底层还不是很了解。

cuizizhe
cuizizhe
回复 @临风ivy : 普通硬盘的话,多线程操作多文件,需要硬盘额外的定位动作,速度也不一定快
临风ivy
临风ivy
根据你的提示重新看了下代码,AsynchronousFileChannel在写入之前给文件加了锁,AsynchronousFileChannel在同一时间内只允许一个写操作,所以多线程是无效的,如果是写多个文件,多线程还是有效的。
d
dwcz
不需要了解底层,只需记住一个人满负荷工作时,优化啥流程都没用,只有增加人手,才是唯一解决方案。所谓并发与串发是在资源丰富时才有意义。资源不丰富时,要么加资源,要么减少资源消耗。
0
不日小鸡

简单来说,在系统操作层面,多线程不能提高资源的处理速度

0
梅开源
梅开源

多线程需要来回调度,有额外开销。对简单暴力任务就直接搞,需要同时捣鼓别的上多线程。

0
hihiabc
hihiabc
cpu是多核的话,多线程有一定作用
返回顶部
顶部