I/O模型
常见的I/O模型有哪几种?
- 阻塞I/O
- 非阻塞I/O
- I/O操作函数将不断的测试数据是否已经准备 好,如果没有准备好,继续测试,直到数据准备好为止。
- I/O复用
- select、poll、epoll这三个函数可以同时阻塞多个I/O操作。
- 信号驱动I/O
- 安装一个信号处理函数,进程继续运行并不阻塞。当 数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数 据。
- 异步I/O
- 异步IO是指用户进程触发I/O操作以后就立即返回,继续开始做自己的事情,而当I/O操作已经完成的时候会得到I/O完成的通知。 异步IO的执行者是内核线程,内核线程将数据从内核态拷贝到用户态,所以这里没有阻塞
同步IO与异步IO
- 同步IO需要发起者进行内核态到用户态的数据拷贝过程,所以这里必须有个阻塞(阻塞、非阻塞、IO复用、信号驱动IO都属于同步IO)
- 异步IO的执行者是内核线程,内核线程将数据从内核态拷贝到用户态,所以这里没有阻塞