马哥教育网络第20期—IO类型与IO模型

IO类型与IO模型

IO类型

同步与异步(synchronous,asynchronous):关注消息通知机制

同步:进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息,则一定是最终结果.
异步:进程发出系统调用之后,会有立即返回结果,但不是最终的结果,当内核处理完成之后,内核通过通知机制通知进程,该系统调用已完成.

阻塞与非阻塞(blocking,nonblocking):关注系统调用完成时,调用者的状态

阻塞:调用者在返回结果之前,一直处于被挂起状态,直到有调用结果返回时才能继续工作.
非阻塞:调用者在调用结果返回之前,并不会被挂起,即系统调用这个动作不会阻塞调用者.

IO模型的分类

  • 阻塞I/O

  • 非阻塞I/O

  • 复用I/O

  • 事件驱动I/O

  • 异步I/O

自己画的

37.png

画完之后参考网上的

42.png

阻塞I/O模型

38.png

 当用户进程发起系统调用之后,在内核还没有完成该调用任务时,进程会一直被挂起,直到内核将调用完成(内核将数据从磁盘取出到内核内存做处理,处理完之后在将数据转移至进程内存),这时进程才可以继续工作.

非阻塞I/O模型

39.png

 当用户进程发起系统调用之后,该进程不会被挂起,先是处于盲等待状态,反复向内核确认该调用是否完成,当内核将数据从磁盘取出到内核内存处理完成时,该进程会被挂起,并且内核会将处理的数据转移至进程内存,这时进程来能继续工作(该进程在数据从内核内存转移至进程内存时,是被挂起).

复用I/O模型

40.png

 当用户进程发起系统调用之后,该进程可以发送多个处理请求交给内核处理,select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间.

事件驱动I/O模型

 当用户进程发起系统调用之后,内核会立即返回一个信号,表示该调用已经收到,接下来该进程可以去处理其他工作,当内核将数据在内核内存中准备好之后,就会通知该进程,进程这个时候就会被挂起,等待内核将数据转移至进程内存,进程才可以继续工作.

异步I/O模型

41.png

 当用户进程发起系统调用之后,内核会立即返回一个信号,表示该调用已经收到,进程可以自由活动,接下来内核处理数据,当内核将数据转移至进程内存之后,会通知该进程数据已经准备好,此时进程只要去进程内存接着处理就OK.

原创文章,作者:nice_neo_linux,如若转载,请注明出处:http://www.178linux.com/19860

(1)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-26 22:40
下一篇 2016-06-26 22:41

相关推荐

  • bash功能特性二 命令别名和历史命令

    一、历史命令     bash提供存储历史命令的功能,下面来详细介绍一下。     1、history命令         命令格式:history [options]   &nb…

    Linux干货 2015-04-21
  • N25-Bazinga-第二周作业

    1.Linux文件管理类命令 命令 功能 命令 功能 pwd 显示当前目录 ls 显示目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找字符串 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working&nbsp…

    Linux干货 2016-12-13
  • 第十一周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。   发送者:     1)使用单向加密算法提取要发送文件的特征码;     2)使用自己的私钥加密特征码并附加在数据后面;     3)生成用于对称加密的临时密码;     4)用此临时密钥加密数据和已经使用私钥加密后的特…

    2017-05-08
  • linux入门

    linux入门 Centos中分root用户和普通用户,root为超级管理员,几乎具有所有的系统控制 刚进入linux系统,Ctrl+Alt+F[1-6]可以切换虚拟终端  (tty) 图形终端:CentOS 6: Ctrl + Alt + F7       CentOS 7:在哪个终端启动,即位于哪个虚拟终端 伪终端…

    Linux干货 2017-02-16
  • ​redis cluster 安装指南

    公司的很多项目在使用redis主从。由于coder的各种毁灭性操作,迫切需要一个能带故障恢复的架构。因此新版的cluster,开始了测试。 一、Cluster 理论基础 Cluster介绍 Redis集群是一个提供在多个Redis间节点间共享数据的程序集。 Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis…

    Linux干货 2016-02-14
  • tcpdump输出详解

    在这里不得不再吐槽下国内整个IT粗糙浮躁,度娘下来的中文文档几尽抄袭~google下来的文档英文文档质量远高于国内中文文档.用ie或没有安装插件的浏览器访问,不然可能会有其它访问请求数据干扰分析 IP数据包结构 TCP数据包结构 // tcpdump需root权限 # tcpdump -x -i eth1 i…

    Linux干货 2015-04-15