如下来自群友对话,有待整理
WriteFileEx 与WriteFile 在批量文件访问,速度差异,才明显,才会反应出WriteFileEx的优势出来
用ovlp的好处,就是不用移动文件指针
随即按访问方便
随即按访问方便
因为不在系统缓存上缓存
所以就要快点
但是不是绝对的
因为你自己不缓存访问的话
可以导致磁盘效率降低
整体速度都会下降
但是不是绝对的
因为你自己不缓存访问的话
可以导致磁盘效率降低
整体速度都会下降
因为用了FILE_FLAG_NO_BUFFERING标志后
可能引起磁盘寻道次数增加
系统缓存对磁头的优化减少了
可能引起磁盘寻道次数增加
系统缓存对磁头的优化减少了
在大量文件读写,并且有要求的时间
FILE_FLAG_NO_BUFFERING标志是必须的
虽然可能减慢速度,但是提高了 IO投递效率
降低的速度可以再其他环节优化后,恢复
FILE_FLAG_NO_BUFFERING标志是必须的
虽然可能减慢速度,但是提高了 IO投递效率
降低的速度可以再其他环节优化后,恢复
可以减少磁盘等待时间
2次访问时间间隔明显减少
也就是单位时间内,访问次数明显提高
降低磁盘速度,是由于磁盘寻道引起的
由于大量的请求下,磁盘磁头移动频率上升的话
也就是单位时间内,访问次数明显提高
降低磁盘速度,是由于磁盘寻道引起的
由于大量的请求下,磁盘磁头移动频率上升的话
磁盘寻道是在进行位置偏移处理吗?基本可以这样理解
所以高性能的磁盘访问
离不开这个
但是磁盘上,也需要进行优化
同步读写,会让磁盘长时间等待
异步访问,移动文件指针麻烦
离不开这个
但是磁盘上,也需要进行优化
同步读写,会让磁盘长时间等待
异步访问,移动文件指针麻烦
基于ovlp可以克服上述2个问题
适合并发的,大规模访问
适合并发的,大规模访问
“同步读写,会让磁盘长时间等待”是因为时间有浪费在系统分配的缓存上,对吗?
也不光是这个
因为你投递请求,是需要时间的,
因为你投递请求,是需要时间的,
一个请求完成,才接受另外1个
异步的请求,是可以 先请求,后完成的
不用ovlp
每次读写,你肯定要进行文件指针的设置啊
这样才能到正确的位置 ,
这不利于并发访问,访问比较麻烦
每次投递,都是一切都准备好了
磁盘只需要直接操作就Ok了
所以效率最高
在磁盘IO队列上
所有请求已经预先排队了
所以效率最高
在磁盘IO队列上
所有请求已经预先排队了
所以,多次操作过程,无需等待,即可进行
Ovlp在驱动里,实际对应的就是 Offset,以及IOStatsBlock
还有就是完成事件
还有就是完成事件
Ovlp实际的参数,对于文件访问来说,就是文件的偏移
看Ovlp结构就明白了
看Ovlp结构就明白了
WriteFileEx可以让用户自己实现线程池
WriteFile实现的话,效率要低点
WriteFile实现的话,效率要低点