(第6章)Unix网络编程卷1之select和poll函数
文章目录
一、I/O复用
1.I/O复用的概念
2.I/O复用的典型场景
二、I/O模型
1.5种I/O模型简介与I/O操作必经的两阶段
(1)Unix下的5种I/O模型
(2)两阶段
2.阻塞式I/O模型
(1)默认情况下,所有的套接字都是阻塞的。下面的eg是以UDP为例子。
3.非阻塞式I/O模型
(1)进程把一个套接字设置成非阻塞,是在通知内核:当所有的I/O操作没有完成时,不要把本进程投入睡眠,而是返回一个错误。还是以UDP为例子。
(2)轮询的简单含义?
轮询还要结合下面select中的timeval结构体进行分析
4.I/O复用:select和poll
(1)I/O复用会阻塞在select和poll这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。下面以UDP为例子。
(2)I/O复用和多线程使用阻塞I/O的区别
5.信号驱动式I/O模型
(1)通过信号,让内核在描述符就绪时,发送SIGIO信号来通知我们。以UDP为例子
6.异步I/O模型:非阻塞
(1)异步I/O与信号驱动I/O的区别
信号驱动I/O是由内核通知我们何时可以启动一个I/O操作;
异步I/O是由内核通知我们I/O操作何时完成;
(2)这些aio_read等异步函数的工作机制是:告知内核启动某个操作,并让内核在整个操作完成后通知我们 (包括数据从内核复制到我们自己的缓冲区)。
7.各种I/O模型的比较
- 阻塞式I/O,非阻塞式I/O,I/O多路复用,信号驱动I/O主要区别在于第一阶段,他们的第二阶段是一样的:在数据从内核复制到调用者的缓冲区期间,进程阻塞于recvfrom调用。
- 异步I/O模型在这两个阶段都要处理,从而不同于其他4种模型。