文章目录
- 五种网络IO模型
- 举例说明
- 阻塞式I/O模型
- 非阻塞式I/O
- I/O多路复用
- 信号驱动式I/O
- 异步I/O
- 比较结果
- 总结
- 同步 异步 阻塞 非阻塞
- 阻塞/非阻塞:
- 同步/异步:
- 举例子:小宇去新华书店买书
- 场景:
五种网络IO模型
阻塞式IO
非阻塞式IO
IO复用(IO multiplexing)
信号驱动式IO
异步IO(POSIX的aio_系列函数)
其中前四种都是同步IO
举例说明
用户态 内核态
一个网络数据输入操作包括两个不同的阶段:
a. 等待数据准备好
b. 从内核向用户态复制数据
阻塞式I/O模型
非阻塞式I/O
I/O多路复用
信号驱动式I/O
异步I/O
比较结果
总结
同步 异步 阻塞 非阻塞
阻塞/非阻塞:
-
关注的是用户态进程/线程(程序)的状态
-
其要访问的数据是否就绪,进程/线程是否需要等待;
同步/异步:
-
关注的是消息通信机制 – 内核与应用程序的交互
-
访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞;
-
异步只需要关注I/O操作完成的通知,并不主动读写数据,由操作系统内核完成数据的读写
举例子:小宇去新华书店买书
场景:
小宇去新华书店买书
-
如果新华书店没有,就一直等着书店有了书之后才走。 (同步阻塞)
-
如果新华书店没有,先离开书店;然后每天都去书店逛一次,直到书店到货了,买了就走 。(同步非阻塞)
-
如果新华书店没有,留下电话号码;书店有货时,老板打电话通知他,他再去书店买书。(信号驱动IO 同步非阻塞)
-
如果新华书店没有,留下地址;书店有货时,老板直接把书 送到家(异步非阻塞)
对应于程序:用户进程调用系统调用用户进程对应小宇,内核对应书店老板,书对应数据, 买书就是一个系统调用,而内核拷贝数据到进程这个过程近似于老板送书到小宇手中。