核心结论
区分阻塞、非阻塞、输入输出复用、信号驱动和异步五类 I/O 模型,关键是观察两个阶段:等待资源就绪,以及把数据从内核缓冲区复制到用户缓冲区。还要判断调用方在每个阶段是否等待、由谁发出通知,以及收到通知时操作是否已经完成。阻塞与非阻塞主要描述一次调用是否会等待;同步与异步描述操作完成边界和控制权转移。非阻塞调用并不等于异步操作,基于 select、poll 或 epoll 的输入输出复用通常仍属于同步 I/O。
底层机制
以套接字读取为例,数据先从网络到达内核接收缓冲区,再由读取调用复制到用户空间。阻塞式 I/O 中,线程调用 read 后可能睡眠,直到数据就绪并完成复制,或