7.8
深览指数
科技虎嗅·宇众不同的露萱··AI 生成

两种系统哲学的分野:为什么 Windows 选择了 IOCP?

本文从操作系统设计哲学的根本分歧切入,解释了 Windows IOCP 为何采用“完成通知”而非 Unix 的“就绪通知”模型。文章指出,IOCP 早在 1994 年便随 Windows NT 3.5 发布,其核心思想是将线程调度与并发连接数解耦,由内核负责负载均衡,这一设计在近三十年后被 Linux 的 io_uring 以类似哲学“致敬”。文章适合对操作系统内核、高性能网络编程有基础理解的读者,能帮助理解不同 I/O 模型背后的设计取舍与历史脉络。原文 ↗

核心观点
  • Windows IOCP 与 Linux epoll/io_uring 的根本分歧在于“完成通知”与“就绪通知”两种不同的系统设计哲学,而非单纯的技术优劣。
  1. 01IOCP 随 Windows NT 3.5 于 1994 年发布,其核心设计者 Dave Cutler 将 DEC VMS 系统的异步 I/O 完成机制带入了 Windows NT 内核。
  2. 02IOCP 通过“完成端口”与“并发值”参数,将工作线程数量与 CPU 核心数绑定,从根本上解耦了“并发连接数”与“实际工作线程数”。
  3. 03Linux 的 io_uring 于 2019 年提出,采用“完成队列”设计,体现了“完成驱动”哲学在 Linux 世界的回归。
  4. 04IIS、SQL Server、.NET、libuv (Windows 平台) 及 Tokio (Windows 平台) 均基于 IOCP 构建高性能网络层。
反方 / 局限
  • 文章指出 io_uring 在具体实现上(如共享内存环减少系统调用)与 IOCP 有较大差异,暗示 IOCP 的设计并非最终答案,现代硬件(NVMe)和更低的延迟需求催生了更极致的方案。
10 分钟 · 3 卡片 · 9 资料
读原文 →

前置背景

平行视角

延伸追问