为了应对日益增长的并发需求,操作系统的 I/O 模型经历了一场从“死等”到“全自动”的进化。
这场进化的核心矛盾在于:如何处理 I/O 操作的两个阶段(等待数据就绪、数据从内核拷贝到用户空间)。
模型对比
| 模型 | 第一阶段 (等待) | 第二阶段 (拷贝) | 特点 | 结论 |
|---|---|---|---|---|
| 阻塞 I/O | 阻塞 | 阻塞 | 程序“死等”,简单但低效 | 同步 |
| 非阻塞 I/O | 轮询 (非阻塞) | 阻塞 | “忙轮询”,解放线程但空转 CPU | 同步 |
| I/O 多路复用 | 阻塞 (select/epoll) | 阻塞 | 内核代管,单线程处理万级并发 | 同步 |
| 信号驱动 I/O | 非阻塞 | 阻塞 | “取餐铃”通知,省去轮询辛苦 | 同步 |
| 异步 I/O | 非阻塞 | 非阻塞 | 全自动,内核送饭到桌上 | 异步 |
通过理解这些模型的演进,你将能够根据业务场景选择最合适的并发策略。