没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
13页
Linux中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序接口(API)就提供了这种功能。在本文中,我们将对这个 API 概要进行介绍,并来了解一下如何使用它。
资源推荐
资源详情
资源评论
使用异步 I/O 大大提高应用程序的性能
——学习何时以及如何使用 POSIX AIO API
摘要:Linux® 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之
后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序
在等待 I/O 请求完成时不需要使用任何中央处理单元( CPU)。但是在某些情况中,I/O 请
求可能需要与其他进程产生交叠。可移植操作系统接口(POSIX)异步 I/O(AIO)应用程序
接口(API)就提供了这种功能。在本文中,我们将对这个 API 概要进行介绍,并来了解一
下如何使用它。
一、AIO 简介
Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。它是 2.6 版本内核的一个
标准特性,但是我们在 2.4 版本内核的补丁中也可以找到它。AIO 背后的基本思想是允许
进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成。稍后或在接收到 I/O 操作完成
的通知时,进程就可以检索 I/O 操作的结果。
二、I/O 模型
在深入介绍 AIO API 之前,让我们先来探索一下 Linux 上可以使用的不同 I/O 模型。
这并不是一个详尽的介绍,但是我们将试图介绍最常用的一些模型来解释它们与异步 I/O
之间的区别。图 1 给出了同步和异步模型,以及阻塞和非阻塞的模型。
图 1. 基本 Linux I/O 模型的简单矩阵
每个 I/O 模型都有自己的使用模式,它们对于特定的应用程序都有自己的优点。本节
将简要对其一一进行介绍。
1. 同步阻塞 I/O
最常用的一个模型是同步阻塞 I/O 模型。在这个模型中,用户空间的应用程序执行一
个系统调用,这会导致应用程序阻塞。这意味着应用程序会一直阻塞,直到系统调用完成为
止(数据传输完成或发生错误)。应用程序处于一种不再消费 CPU 而只是简单等待响应的
状态,因此从处理的角度来看,这是非常有效的。
图 2 给出了传统的阻塞 I/O 模型,这也是目前应用程序中最为常用的一种模型。其行为非
常容易理解,其用法对于典型的应用程序来说都非常有效。在调用 read 系统调用时,应用
程序会阻塞并对内核进行上下文切换。然后会触发读操作,当响应返回时(从我们正在从中
读取的设备中返回),数据就被移动到用户空间的缓冲区中。然后应用程序就会解除阻塞
(read 调用返回)。
图 2. 同步阻塞 I/O 模型的典型流程
从应用程序的角度来说,read 调用会延续很长时间。实际上,在内核执行读操作和其他工
作时,应用程序的确会被阻塞。
2. 同步非阻塞 I/O
同步阻塞 I/O 的一种效率稍低的变种是同步非阻塞 I/O。在这种模型中,设备是以非
阻塞的形式打开的。这意味着 I/O 操作不会立即完成,read 操作可能会返回一个错误代码,
说明这个命令不能立即完成(EAGAIN 或 EWOULDBLOCK),如图 3 所示。
图 3. 同步非阻塞 I/O 模型的典型流程
非阻塞的实现是 I/O 请求可能并不会立即完成,需要应用程序调用多次 read()来等
待操作完成。这可能效率不高,因为在很多情况下,当内核执行这个命令时,应用程序必须
要进行忙碌等待,直到数据可用为止,或者试图执行其他工作。正如图 3 所示的一样,这
个方法可以引入 I/O 操作的延时,因为数据在内核中变为可用到用户调用 read 返回数据
之间存在一定的间隔,这会导致整体数据吞吐量的降低。
3. 异步阻塞 I/O
另外一个阻塞解决方案是带有阻塞通知的非阻塞 I/O。在这种模型中,配置的是非阻塞
I/O,然后使用阻塞 select (poll/epoll)系统调用来确定一个 I/O 描述符何时有操作。使
select 调用非常有趣的是它可以用来为多个描述符提供通知,而不仅仅为一个描述符提供通
知。对于每个文件描述符,我们可以请求这个描述符可以写数据、有数据可读以及是否发生
错误的通知。
剩余12页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1899
- 资源: 3854
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功