WriteFileEx 与WriteFile 区别

如下来自群友对话,有待整理


WriteFileEx 与WriteFile 在批量文件访问,速度差异,才明显,才会反应出WriteFileEx的优势出来

 用ovlp的好处,就是不用移动文件指针
随即按访问方便 
 因为不在系统缓存上缓存 
 所以就要快点
但是不是绝对的
因为你自己不缓存访问的话
可以导致磁盘效率降低
整体速度都会下降

 因为用了FILE_FLAG_NO_BUFFERING标志后
可能引起磁盘寻道次数增加
系统缓存对磁头的优化减少了
 在大量文件读写,并且有要求的时间
FILE_FLAG_NO_BUFFERING标志是必须的
虽然可能减慢速度,但是提高了 IO投递效率
降低的速度可以再其他环节优化后,恢复
可以减少磁盘等待时间

 2次访问时间间隔明显减少
也就是单位时间内,访问次数明显提高
降低磁盘速度,是由于磁盘寻道引起的
由于大量的请求下,磁盘磁头移动频率上升的话 

 磁盘寻道是在进行位置偏移处理吗?基本可以这样理解

 所以高性能的磁盘访问
离不开这个
但是磁盘上,也需要进行优化
同步读写,会让磁盘长时间等待
异步访问,移动文件指针麻烦

 基于ovlp可以克服上述2个问题
适合并发的,大规模访问 

 “同步读写,会让磁盘长时间等待”是因为时间有浪费在系统分配的缓存上,对吗?
 也不光是这个
因为你投递请求,是需要时间的,
 一个请求完成,才接受另外1个 
 异步的请求,是可以 先请求,后完成的
 
 不用ovlp 
每次读写,你肯定要进行文件指针的设置啊
这样才能到正确的位置 ,
 这不利于并发访问,访问比较麻烦 
 每次投递,都是一切都准备好了 
 磁盘只需要直接操作就Ok了
所以效率最高
在磁盘IO队列上
所有请求已经预先排队了
所以,多次操作过程,无需等待,即可进行


 Ovlp在驱动里,实际对应的就是 Offset,以及IOStatsBlock
还有就是完成事件 
 Ovlp实际的参数,对于文件访问来说,就是文件的偏移
看Ovlp结构就明白了 

 WriteFileEx可以让用户自己实现线程池
WriteFile实现的话,效率要低点 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值