对于一次I/O操作(以read为例),数据首先被拷贝到内核的某个缓冲区,然后再从内核缓冲区拷贝到应用进程缓冲区。

因此,一次I/O操作通常包含两个阶段:

(1) 等待数据准备好

(2) 从内核向进程复制数据

Unix有5种I/O模型:

  1. 阻塞式I/O
  2. 非阻塞式I/O
  3. I/O复用(select, poll, epoll)
  4. 信号驱动式I/O(SIGIO)
  5. 异步I/O(POSIX的aio_系列函数)

阻塞式I/O

非阻塞式I/O

I/O复用(select, poll, epoll)

信号驱动式I/O(SIGIO)

异步I/O(POSIX的aio_系列函数)

5种I/O模型的比较

其中,前四种为同步I/O模型,最后一种为异步I/O模型。

同步与异步:

同步I/O操作导致请求进程阻塞,直到I/O操作完成;

异步I/O操作不会导致请求进程阻塞。

阻塞与非阻塞:

一个方法调用后,等待数据就绪再返回就是阻塞;立即返回就是非阻塞。

下面这个解释也不错:

参考资料:

Linux IO模式及 select、poll、epoll详解

I/O 模型的演进

最新文章

  1. 《数据结构与算法分析》学习笔记(五)——二叉树
  2. Ngrok 内网穿透神器(转载)
  3. 读取AD模拟分量
  4. poj 2195 Going Home(最小费用最大流)
  5. MySQL的EXPLAIN命令详解(转)
  6. Spring MVC使用commons fileupload实现文件上传功能
  7. Java基础知识强化之网络编程笔记02:Socket通信原理图解
  8. jni 入门 android的C编程之旅 --->环境搭建&&helloworld
  9. 浅析IO模型
  10. OpenCv 2.4.9 (二) 核心函数
  11. 201521123103 《java学习笔记》 第十周学习总结
  12. 【Kafka】
  13. CentOS6搭建OpenVPN服务器
  14. 企业内部DNS跨国配置案例
  15. Java基础-工厂设计模式(三锅的肥鸡)
  16. opencv 图片剪切
  17. read_csv 的 names 和 index_col 参数作用
  18. Fiddler常用命令
  19. debian安装tftp服务
  20. Expm 2_2 查找中项问题

热门文章

  1. python--->相对和绝对路径
  2. Python设计模式(3)-工厂方法模式
  3. Git应用详解第六讲:Git协作与Git pull常见问题
  4. 经常使用到的vim命令
  5. alg-链表中有环
  6. 数据结构和算法(Golang实现)(8.1)基础知识-前言
  7. JDK安装详细步骤
  8. 必须先理解的RocketMQ入门手册,才能再次深入解读
  9. Java 添加、隐藏/显示、删除PDF图层
  10. centos7下端口映射