标准IO-直接IO-异步IO笔记

标准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,如数据库应用
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值