开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型,见下图

  接下来一一讲解这5种模型
  阻塞型IO:最简单的一种IO模型,简单理解就是死等,即进程或线程一直等待莫格条件,不满足则一直等待。
  非阻塞型IO:应用进程与内核交互,目的未达到之前会直接返回,然后不断轮询,不停的去问内核数据是否准备好?如果发现准备好了,那就把数据拷贝到用户空间中。应用进程通过
  recvfrom 调用不停的去和内核交互,直到内核准备好数据。如果没有准备好,内
  核会返回error,应用进程在得到error后,过一段时间再发送recvfrom请求。在两次发送请求的时间段,进程可以先做别的事情。
  信号驱动IO:我们会发现非阻塞型IO方式一遍一遍的轮询不如等内核把数据准备好,然后通知进程,当进程收到该通知时,便开始把数据拷贝到用户空间中。
  即应用进程预先向内核注册一个信号处理函数,然后用户进程返回,并不阻塞,当内核数据准备就绪时会发送一个信号给进程,用户进程便在信号处理函数中开始把数据拷贝到用户空间中
  IO复用模型:顾名思义,即将多个进程I/0注册到同一管道上,这里管道会统一和内核交互。当管道中的某一个请求需要好的数据准备好之后,进程再把对应的数据拷贝到用户空间中。I/O多路转接是多了一个Select函数,多个进程的IO可以注册到同一个Select中,用户调用该Select。Select会监听所有注册好的I/O,如果所有被监听的I/O需要的数据都没有准备好,Select调用进程会阻塞。当任意一个I/O所需要的数据准备好之后,Select调用就
  会返回,然后进程再通过recvfrom来进行数据拷贝。但实际上,它并未向内核注册信号处理函数,所以它并不是非阻塞的。
  看到开篇的那张图,大家肯定会有疑问,为什么之前的这四种模型都是同步的呢?因为无论以上哪种模型,真正的数据拷贝过程都是同步的(自己的理解便是:所有的数据拷贝过程都是用户进程手动执行的) 分享一个Linux IO的参考资料:http://makeru.com.cn/live/4011_1565.html?s=45051
  那么我们来看真正异步执行的I/O模型:
  异步I/O模型:应用进程把I/O请求传给内核后,完全由内核去操作文件拷贝。内核完成相关操作后,会发信号告诉应用进程本次I/O已经完成。用户进程发起aio_read操作之后,给内核传递描述符、缓冲区指针、缓冲区大小等,告诉内核进程当整个操作完成时,如何通知进程,然后就立刻去做其他事儿了。当内核收到aio_read后,会立刻返回,然后内核开始等待数据准备,数据准备好以后,直接把数据拷贝到用户控件,然后再通知进程本次IO已经完成。

  更多交流学习可以私我昵称wx号 各个模型的执行流程比较图如下图所示

linux select read阻塞_linux下的IO模型详解相关推荐

  1. Nginx的IO模型详解

    文章目录 一 普及 用户空间和内核空间 进程切换 进程阻塞 文件描述符 缓存IO Linux IO模型 二 IO模型 1.阻塞I/O模型 2.非阻塞I/O模型 3.I/O复用模型 4.信号驱动I/O ...

  2. 网络套接字编程之IO模型详解

    网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...

  3. linux 网络io命令详解,Linux下五种网络IO模型详解

    本文我们主要来了解一下Unix/Linux下5种网络IO模型:blocking IO, nonblocking IO, IO multiplexing, signal driven IO, async ...

  4. 【Linux基础】Linux的5种IO模型详解

    引入 为了更好的理解5种IO模型的区别,在介绍IO模型之前,我先介绍几个概念 1.进程的切换 (1)定义 为了控制进程的执行,内核必须有能力挂起正在CPU上运行的进程,并恢复以前挂起的某个进程的执行. ...

  5. yum是干什么的_linux下的yum命令详解

    yum是干什么的 使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题).foo is needed by ba ...

  6. 看一遍就理解:IO模型详解

    前言 大家好,我是程序员田螺.今天我们一起来学习IO模型.在本文开始前呢,先问问大家几个问题哈~ 什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll跟 ...

  7. 五种网络IO模型详解

    一 IO操作本质 数据复制的过程中不会消耗CPU # 1 内存分为内核缓冲区和用户缓冲区 # 2 用户的应用程序不能直接操作内核缓冲区,需要将数据从内核拷贝到用户才能使用 # 3 而IO操作.网络请求 ...

  8. 史上最全IO模型详解

    操作系统 在介绍IO模型之前,先要介绍内核态和用户态.在操作系统中,因为有些操作指令是不能开放给用户的,比如读取磁盘,清除内存,读写网卡数据.这样用户态程序不能随便操作内核地址,即使用户程序崩溃了,对 ...

  9. Java中五中IO模型详解

    一.前言 在<Unix网络编程>一书中提到了五种IO模型,5种IO模型分别为: 阻塞IO模型.非阻塞IO模型.IO复用模型.信号驱动的IO模型.异步IO模型.下面就分别来介绍一下这5种IO ...

最新文章

  1. oracle lgwr io100%,数据库服务器系统I/O 100%案例分析
  2. 【数据中台】你的企业是否需要建设数据中台?
  3. IOS客户端Coding项目记录(二)
  4. Virtools脚本语言(VSL)教程 - 枚举
  5. 当我的master被fork后,我把master删了,然后我就成了他人的bitch
  6. 腾讯已问灵魂,鹅厂新立家风
  7. DBCA静默建库中的两个小问题
  8. 23. Element lastChild 属性
  9. python3中浮点数float的四舍五入,round跟decimal区别
  10. python3--命名空间字典
  11. Linux安装yum过程(超详细!)
  12. echarts实现3D饼图
  13. 关于GHOST恢复提示找不到GHOSTERR.TXT的文件(转)
  14. Kafka运维大全来了!优化、监控、故障处理……
  15. csv格式导出,身份证号码显示不全
  16. 学习matlab(六)——微分和积分
  17. alertmanager监控告警163邮箱通知
  18. VMware安装window8系统
  19. Linux系统之iftop的基本使用
  20. 带bitlocker解密的pe_Win10使用BitLocker加密U盘|Win10自带BitLocker加密U盘

热门文章

  1. Mysql的IP转换
  2. android studio 代码缩略图,android studio 设置模板
  3. python时间序列画图_简洁的Python时间序列可视化实现
  4. C语言表示一元四次函数,论c语言程序设计 第四次讨论.ppt
  5. html css 表格自动高度,HTML/CSS - 具有固定高度的容器中表格单元格的高度不一致...
  6. sip gw功能包括_道哥漫谈:大话有趣的SIP通信
  7. Eclipse中java文件编码格式修改
  8. android art虚拟机安装,Android中art虚拟机启动流程
  9. linux ssl 证书服务器,Linux下Nginx安全证书ssl配置方法
  10. java如何跳出循环6,Java循环结结构