前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >系统五种I/O模型【原理笔记】

系统五种I/O模型【原理笔记】

作者头像
瓜农老梁
发布2020-02-26 11:46:34
1.1K0
发布2020-02-26 11:46:34
举报
文章被收录于专栏:瓜农老梁瓜农老梁

目录

代码语言:javascript
复制
五、异步I/O模型

本文整理了阻塞I/O模型、非阻塞式I/O、I/O复用(select和poll)、信号驱动式I/O(SIGIO)、异步I/O原理知识点。

一、阻塞式I/O模型

备注:进程调用recvfrom, 系统调用直到数据到达且数据被复制到应用进程的缓存区或者发生错误时才返回结果,应用进程开始数据数据。特点:图示中第1步和第2步都是阻塞的。

二、非阻塞式I/O模型

备注:调用recvfrom时没有数据返回,因此内核转而立即返回一个EWOULDBLOCK错误;数据准备好被复制到应用进程缓存区,于是recvfrom成功返回。特点:图示第1步没有阻塞;第2步阻塞;由于持续轮询内核调用recvfrom,耗费大量CPU资源。

三、I/O复用模型

备注:I/O复用可以调用select/poll阻塞在这两个系统调用中的某一个上,而不是阻塞在真正的I/O系统调用上。图示中应用进程阻塞于select调用,等待数据报套接字变为可读,当select返回套接字可读这一条件时,调用recvfrom把所读数据复制到应用进程缓冲区。特点:select等待多个描述符就绪;即图示中第1步可以等待多个文件描述符。与I/O复用密切相关的另一种I/O模型:在多线程中使用使用阻塞I/O;该模式没有使用select阻塞在多个文件描述符上,而是使用多线程,每个文件描述符一个线程,这样每个线程都可以自由地调用像recvfrom之类的阻塞式系统调用。

四、信号驱动式I/O模型

备注:应用程序开启套接字的信号驱动式I/O功能,通过sigaction系统调用安装一个信号处理函数。系统调用立即返回,应用程序继续工作,即:非阻塞。当数据报准备好读取后,内核为该进程产生一个SIGIO信号。进而可以调用recvfrom读取数据报。特点:内核在描述符就绪时发送SIGIO信号通知应用程序,等待数据报的过程不被阻塞;即:图示第1步不被阻塞。

五、异步I/O模型

备注:异步I/O由POSIX规范定义,工作机制:应用进程告诉内核启动某个动作,并在内核处理整个过程含数据准备以及数据从内核空间复制到用户空间完成后通知应用进程。应用进程在等待I/O完成期间不被阻塞。特点:应用进程不被阻塞调用aio_read后立即返回;内核在第1步和第2步全部完成后通知应用进程;支持该异步I/O模型的系统少见。

六、参考文献

《UNIX网络编程卷1》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜农老梁 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、阻塞式I/O模型
  • 二、非阻塞式I/O模型
  • 三、I/O复用模型
  • 四、信号驱动式I/O模型
  • 五、异步I/O模型
  • 六、参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档