文章目录

  • ​​一、I/O复用​​
  • ​​1.I/O复用的概念​​
  • ​​2.I/O复用的典型场景​​
  • ​​二、I/O模型​​
  • ​​1.5种I/O模型简介与I/O操作必经的两阶段​​
  • ​​2.阻塞式I/O模型​​
  • ​​3.非阻塞式I/O模型​​
  • ​​(2)轮询的简单含义?​​
  • ​​4.I/O复用:select和poll​​
  • ​​(2)I/O复用和多线程使用阻塞I/O的区别​​
  • ​​5.信号驱动式I/O模型​​
  • ​​6.异步I/O模型:非阻塞​​
  • ​​(1)异步I/O与信号驱动I/O的区别​​
  • ​​7.各种I/O模型的比较​​
  • ​​8.同步I/O和异步I/O的对比​​
  • ​​三、select函数​​
  • ​​1.​​
  • ​​(1)timeout参数​​
  • ​​(2)readset,writeset和execeptset​​
  • ​​2.描述符的就绪条件​​

一、I/O复用

1.I/O复用的概念

(第6章)Unix网络编程卷1之select和poll函数_UDP

2.I/O复用的典型场景

(第6章)Unix网络编程卷1之select和poll函数_UDP_02

二、I/O模型

1.5种I/O模型简介与I/O操作必经的两阶段

(1)Unix下的5种I/O模型

(第6章)Unix网络编程卷1之select和poll函数_UDP_03


(第6章)Unix网络编程卷1之select和poll函数_UDP_04


(2)两阶段

(第6章)Unix网络编程卷1之select和poll函数_UDP_05

2.阻塞式I/O模型

(1)默认情况下,所有的套接字都是阻塞的。下面的eg是以UDP为例子。

(第6章)Unix网络编程卷1之select和poll函数_非阻塞_06

3.非阻塞式I/O模型

(1)进程把一个套接字设置成非阻塞,是在通知内核:当所有的I/O操作没有完成时,不要把本进程投入睡眠,而是返回一个错误。还是以UDP为例子。

(第6章)Unix网络编程卷1之select和poll函数_UDP_07

(2)轮询的简单含义?

(第6章)Unix网络编程卷1之select和poll函数_复用_08


轮询还要结合下面select中的timeval结构体进行分析

4.I/O复用:select和poll

(1)I/O复用会阻塞在select和poll这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。下面以UDP为例子。

(第6章)Unix网络编程卷1之select和poll函数_UDP_09


(第6章)Unix网络编程卷1之select和poll函数_UDP_10

(2)I/O复用和多线程使用阻塞I/O的区别

(第6章)Unix网络编程卷1之select和poll函数_非阻塞_11

5.信号驱动式I/O模型

(1)通过信号,让内核在描述符就绪时,发送SIGIO信号来通知我们。以UDP为例子

(第6章)Unix网络编程卷1之select和poll函数_UDP_12

6.异步I/O模型:非阻塞

(1)异步I/O与信号驱动I/O的区别

信号驱动I/O是由内核通知我们何时可以启动一个I/O操作;
异步I/O是由内核通知我们I/O操作何时完成

(2)这些aio_read等异步函数的工作机制是:告知内核启动某个操作,并让内核在整个操作完成后通知我们 (包括数据从内核复制到我们自己的缓冲区)

(第6章)Unix网络编程卷1之select和poll函数_UDP_13

7.各种I/O模型的比较

  • 阻塞式I/O,非阻塞式I/O,I/O多路复用,信号驱动I/O主要区别在于第一阶段,他们的第二阶段是一样的:在数据从内核复制到调用者的缓冲区期间,进程阻塞于recvfrom调用。
  • 异步I/O模型在这两个阶段都要处理,从而不同于其他4种模型。

8.同步I/O和异步I/O的对比

(第6章)Unix网络编程卷1之select和poll函数_UDP_14


(第6章)Unix网络编程卷1之select和poll函数_UDP_15

三、select函数

1.

(1)timeout参数

(2)readset,writeset和execeptset

2.描述符的就绪条件