我是靠谱客的博主 激昂画笔,最近开发中收集的这篇文章主要介绍标准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,如数据库应用

最后

以上就是激昂画笔为你收集整理的标准IO-直接IO-异步IO笔记的全部内容,希望文章能够帮你解决标准IO-直接IO-异步IO笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部