目录
文章目录
Socket I/O 处理流程
每次 Socket I/O 操作,大体上都需要经历 2 个阶段:
- 准备数据阶段:数据包到达 Kernel 并就绪,Application 可以开始数据拷贝。
- 拷贝数据阶段:Application 通过 SCI 将数据从 Kernel 拷贝到 Userspace(进程虚拟地址空间)中。
对于上述 I/O 流程,基于 BSD Socket API 可以实现以下几种 I/O 模式:
- 阻塞式 I/O(Blocking I/O)
- 非阻塞式 I/O(Non-Blocking I/O)
- I/O 多路复用(I/O Multiplexing)
从阻塞程度的角度出发,效率由低到高为:阻塞 IO > 非阻塞 IO > 多路复用 IO。
阻塞式 I/O(Blocking I/O)
阻塞:是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。
默认情况下的 Socket I/O 都是阻塞式 I/O。
如下图所示:
- 准