五种IO模型

IO分为两步:

  1. 等待数据准备好
  2. 数据搬迁

五种IO模型包括: 阻塞IO, 非阻塞IO, 信号驱动IO, IO多路转接, 异步IO

阻塞式IO

blocking I/O

在内核将数据准备好之前一直阻塞

非阻塞IO

noblocking I/O
调用程序发起系统调用之后不断轮询询问内核数据有没有准备好.
没有准备好时不会阻塞程序

信号驱动IO

signal blocking I/O
当数据报准备好时,内核会给调用程序发送一个信号
在等待信号期间调用程序不会阻塞

IO多路转接

I/O multiplexing
类似于非阻塞型I/O,只不过轮询不是用户线程去执行,而是内核去轮询.内核监听程序监听到数据准备好后,调用内核函数复制数据到用户态.

异步IO

asynchronous I/O
异步IO依赖信号处理程序来进行通知.
不过前面都是数据准备阶段的阻塞和非阻塞,异步IO模型通知的是IO操作已完成,而不是数据准备完成.
异步IO才是真正的非阻塞,主进程只负责做自己的事情,等IO操作完成.