文章目录
IO预备知识介绍
IO的两个阶段
- 数据被拷贝到操作系统内核的缓冲区
- 数据从操作系统内核中拷贝的用户内存
理解阻塞和非阻塞
- 阻塞是一直block住对应的线程直至操作完成
- 非阻塞是在数据准备时就会立即返回
理解同步和异步
- 先来看看两者在POSIX上的概念:
- A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;
- An asynchronous I/O operation does not cause the requesting process to be blocked;
- 这里需要关注的是IO operation,也就是真正的IO过程,也就是我们上述讲到的第二阶段。而我们下述前方法中的第二阶段都是阻塞的,所以都是同步的方法。只有最后一种是真正的异步IO
操作系统层面IO类别
- 五种IO模型对比如下图所示:
阻塞IO
- 在IO的两个阶段都是阻塞的
非阻塞IO
- 在数据准备过程中不断地询问kernel数据是否准备完成
IO多路复用
- 有些地方也称其为(event driven IO)
- 多路复用转接只多了一个select函数。
- 当用户进程调用select时,整个线程会被blocking
- 他的基本原理就是poll()这个函数会不断的轮询所监控的所有socket是否准备完成,当某个socket有数据返回时,便会通知用户进程。
- 在多路复用中,实际上,对于每一个socket来说,都是设置成non-blockin