一、IO模型

一次read操作:

(1)等待数据准备好:从磁盘到内核内存
(2)从内核内存复制到进程内存

示意图如下:

I/O类型:

 同步和异步:synchronous,asynchronous

   关注的是消息通知机制

  同步: 调用发出之后不会立即返回,但一旦返回,则返回的是最终结果
  异步: 调用发出之后,被调用方立即返回消息,但返回的并非最终结果;被调用者通过状态、通知机制等来通知调用者,或通过回调函数来处理结果
阻塞和非阻塞: block, nonblock
关注的是调用者等待被调用者返回结果时的状态
  阻塞: 调用结果返回之前,调用者会被挂起;调用者只有在得到返回结果之后才能继续
  非阻塞: 调用者在结果返回之前,不会被挂起,即调用不会阻塞调用者

I/O模型:  

blocking IO: 阻塞式IO
nonblocking IO: 非阻塞式IO
IO multiplexing: 复用型IO
   select(),poll()
signal driven IO: 事件驱动式IO
  通知:
    水平触发: 多次通知
    边缘触发: 只通知一次
asynchronous IO: 异步IO

上图为阻塞型IO:调用者发起请求后,整个过程会被挂起,处于不可中断状态,直到IO完成。

上图为非阻塞型IO:调用者发起请求后,内核会立即响应。内核准备数据的第一阶段,调用者虽然不会被阻塞,但是处于"盲等待",调用者会每隔一段时间向内核发起调用,询问是否准备好数据, 拷贝数据的第二阶段,调用者依然是被阻塞的。

上图为复用型IO:简单理解为有一个代理来为调用者服务,这个代理可能是select或者poll,代理接收一个请求之后,可以继续接收下一个请求,调用者被阻塞在select上,到数据复制第二阶段,调用者被阻塞在IO阶段。select默认上限为1024个

上图为事件驱动型IO:调用者发起请求之后,被调用者立即响应请求,然后调用者可以去做别的事情,等到第一阶段完成后,被调用者向调用者发通知,告诉调用者数据已准备好,调用者再去处理第二阶段。事件驱动型IO的好处就是可以一次处理多个请求。

事件型IO第二阶段是被阻塞的,第一阶段被调用者准备好数据后,给调用者发通知的机制有两种:水平触发和边缘触发

  水平触发:多次通知,发送通知后没响应,就会一直发送通知直到通知被调用者响应

边缘触发: 通知一次,发送一次通知调用者没响应,那就不会再发通知,调用者没接收到通知没关系,可以根据回调函数来获取资源

上图为异步型IO:调用者发起请求之后,被调用者响应,然后调用者可以去做别的事情,直到被调用者处理完第一阶段和第二阶段后,最后给调用者发个信号。整个过程调用者不会被阻塞,大大提高了性能。

linux基础之IO模型的更多相关文章

  1. Linux 的 Socket IO 模型

    前言 之前有看到用很幽默的方式讲解Windows的socket IO模型,借用这个故事,讲解下linux的socket IO模型: 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系. 他 ...

  2. [转载] Linux五种IO模型

      转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型性能分析   目录(?)[-] 概念理解 Lin ...

  3. 网络通信 --> Linux 五种IO模型

    Linux 五种IO模型 聊聊Linux 五种IO模型

  4. Linux五种IO模型(同步 阻塞概念)

    Linux五种IO模型 同步和异步 这两个概念与消息的通知机制有关. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.比如,调用readfrom系统调用时,必须等待IO操 ...

  5. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  6. (转载) Linux五种IO模型

    转载:http://blog.csdn.net/jay900323/article/details/18141217     Linux五种IO模型及分析   目录(?)[-] 概念理解 Linux下 ...

  7. 从 Linux 操作系统谈谈 IO 模型(终)

    Linux 为什么要区分内核空间与用户空间? Linux 操作系统的 IO 模型有哪几种?有啥区别? 常说的阻塞现象,到底是咋回事? 网络编程研发时,那块到底耗时最多,代码是否还有优化空间? 前几期的 ...

  8. linux下的IO模型---学习笔记

    1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域 ...

  9. 深入理解JAVA I/O系列六:Linux中的IO模型

    IO模型 linux系统IO分为内核准备数据和将数据从内核拷贝到用户空间两个阶段. 这张图大致描述了数据从外部磁盘向运行中程序的内存中移动的过程. 用户空间.内核空间 现在操作系统都是采用虚拟存储器, ...

随机推荐

  1. Springboot笔记(二)整合

    1.整合Freemarker 一种模板引擎,前端渲染模板的,类似于EL,jsp,不过比前两个好用 导入很简单   pom.xml <dependency> <groupId>o ...

  2. ajax jsonp跨域 【转】

    跨域的基本原理:    JSONP跨域GET请求是一个常用的解决方案,    JSONP的最基本的原理是:动态添加一个<script>标签,而script标签的src属性是没有跨域的限制的 ...

  3. Window下,Jenkins忘记密码解决方法

    没有修改过密码的情况下找回初始密码(或者第一次部署的时候) 进入目录 D:\jenkins\secrets ,找到文件 initialAdminPassword 在jenkins页面,输入登录名adm ...

  4. 创建一个JavaWeb工程

    1.用到的工具:eclipse编译器+Tomcat9,在自己电脑上已配置好jdk和tomcat的环境变量 2.新建一个project 2.选择web文件中的Dynamic Web project,进入 ...

  5. 根据map中的某一key进行排序(快速排序实现)

    /** * @author Gaoxl * 根据key值排序,要求key值能够转为Long类型(快速排序) * @param maps * @param key * @return */ public ...

  6. 浅谈Linux与unix系统的来历

    在今天的UNIX是商业化的,UNIX系统大多是与硬件配套的,也就是说,大多数UNIX系统如AIX.HP-UX等是无法安装在 x86 服务器和个人计算机上的,UNIX系统是一个分时系统,而UNIX是至关 ...

  7. Linux下使用Nginx

    模拟tomcat集群 1.下载tomcat7,/usr/local下新建目录tomcat,将tomcat7剪切到/usr/local/tomcat wget http://mirror.bit.edu ...

  8. Linux 使用vim命令编辑文件内容

    在终端可以使用vim命令来直接编辑文件内容. vim,也可以叫做vi. vim有三种模式:命令模式.输入模式.底线命令模式. 命令模式 vim  文件名   进入命令模式,vim也可以写成vi. 如果 ...

  9. 什么是AOP面向切面编程思想

    一.什么是AOP? 1.AOP不是一种语言,是一种编程范式 常见的编程范式: 面向过程.面向对象.函数式编程.事件驱动编程等 2.AOP可以解决特定问题,不能解决所有问题. 3.是面向对象的补充,不是 ...

  10. PHP0026:PHP 博客项目开发3