一、简介

  本文向大家介绍五种I/O模型。分别是阻塞I/O、非阻塞I/O、I/O复用、信号驱动式I/O、异步I/O等。内容参考《UNIX网络编程》,大家想进深入学习网络编程,建议去读读这本书。

二、模型介绍

(一)、阻塞I/O模型

  阻塞I/O是最简单的I/O,一般表现为进程或线程等待某个条件,如果条件不满足,则一直等下去。条件满足,则进行下一步操作。

  上图中,应用进程通过系统调用 recvfrom 接收数据,但由于内核还未准备好数据报,应用进程就阻塞住了。直到内核准备好数据报,recvfrom 完成数据报复制工作,应用进程才能结束阻塞状态。

  这里简单解释一下应用进程和内核的关系。内核即操作系统内核,用于控制计算机硬件。同时将用户态的程序和底层硬件隔离开,以保障整个计算机系统的稳定运转(如果用户态的程序可以控制底层硬件,那么一些病毒就会针对硬件进行破坏,比如 CIH 病毒)。应用进程即用户态进程,运行于操作系统之上,通过系统调用与操作系统进行交互。上图中,内核指的是 TCP/IP 等协议及相关驱动程序。客户端发送的请求,并不是直接送达给应用程序,而是要先经过内核。内核将请求数据缓存在内核空间,应用进程通过 recvfrom 调用,将数据从内核空间拷贝到自己的进程空间内。大致示意图如下:

              

  阻塞 I/O 理解起来并不难,不过这里还是举个例子类比一下。

  例1:假设大家日常工作流程设这样的(其实就是我日常工作的流程

最新文章

  1. Beta工作比例(Transcend)
  2. UIWebView显示乱码问题
  3. Winform中Grid跨行复制一列
  4. 字体大小自适应纯css解决方案
  5. [Java 实现AES加密解密]
  6. bootstrap框架-----可见 隐藏
  7. sicily 1022. Train Problem
  8. tar命令解压、压缩gz/bz2/xz文件
  9. java web(jsp)-The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
  10. LINQ to SQL 基础
  11. Memcached安装卸载
  12. Docker容器的网络连接
  13. c语言二叉树的递归建立
  14. CSS--块级元素和行内元素
  15. Centos7 Crontab
  16. npm install权限问题,报错:permission denied。
  17. JAVA记录-SpringMVC scope属性的两种模式
  18. html5-移动端布局模板
  19. bulk_write&Replace_one
  20. puppet更新失败

热门文章

  1. ROStopic 通信方式
  2. ios兼容
  3. vmware如何克隆多个linux系统
  4. webpack4.0源码分析之Tapable
  5. javasript模块化
  6. 咏南中间件D7客户端演示
  7. python 简化数据结构的初始化二 支持关键字参数
  8. java中 int、char、long各占多少字节数
  9. python操作excel实用脚本
  10. LC 918. Maximum Sum Circular Subarray