概述
标准IO-直接IO-异步IO笔记
1
标准IO
通过read,write实现
read: 如果数据在内存中,那么直接从内存中读出数据并返回给应用程序。如果不在内存,那么数据会被从磁盘读到
也告诉缓存,然后再从页缓存拷贝到用户地址空间。
wirte:数据从用户态拷贝到缓存即刻返回,并不会等数据写到磁盘上。
优点:
1. 使用内核缓冲区,分离用户地址空间和实际物理设备
2. 减少磁盘读写次数,发挥IO调度器优势平衡处理器和IO速度差异
缺点:
1. 数据传输需要在应用程序地址空间和页缓存之间进行多次数据拷贝
增加CPU和内存开销
2
直接IO:
在open时加上O_DIRECT标签
读写时不经过操作系统缓冲直接提交到块设备层
优点:
1. 数据直接在用户地空间和磁盘间直接通过DMA传输,没有额外拷贝工作,减少cpu和内存的开销
缺点:
1. CFQ调度器退化为FIFO,引起磁盘抖动。
2. 无法充分利用磁盘带宽
3. read/write会阻塞。
标准IO的缺点是多次内存拷贝,直接IO的缺点是容易引起磁盘抖动和阻塞。
3
异步IO
专有系统调用实现 io_setup, io_submit, io_getevents
提交进程绕过系统缓存,一次可以批量提交多个数据流到IO调度器,提交进程不阻塞,通过io_getevents查询处理结果。
优点:
1. 提交进程不阻塞,可以用来处理其他工作,充分利用CPU
2. 批量提交减少用户和内核态地址空间切换开销。
3. 数据提交零拷贝,减少CPU和内存开销
4. 批量提交请求,发挥CFQ优势减少磁盘抖动
缺点:
1. 相比于标准和直接IO,API略显复杂。
2. 如果只处理少量IO请求时,异步IO无优势,可能比标准IO还要差。
3. 请求直接提交到IO调度层,所以io_submit阻塞时间较长,异步不充分。
AIO使用场景:
IO密集型service,如数据库应用
最后
以上就是激昂画笔为你收集整理的标准IO-直接IO-异步IO笔记的全部内容,希望文章能够帮你解决标准IO-直接IO-异步IO笔记所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复