IO 多路复用:一个线程为什么可以同时处理大量 HTTP 请求?

IO 多路复用:一个线程为什么可以同时处理大量 HTTP 请求? 我们知道,一个 Web 服务同时面对大量 HTTP 请求时,并不一定需要: 1000 个请求 ↓ 1000 个线程 对于 IO 密集型服务,更常见的做法是让执行单元在等待网络 IO 时不要一直阻塞,然后利用事件机制处理其他连接。 这就引出了一个非常重要的概念: IO 多路复用(I/O Multiplexing)。 它是理解 Linux 网络服务器、Nginx、Node.js、Swoole、Hyperf 等高并发网络程序的基础。 1. 先从一个 Socket 开始 一个 HTTP 服务器,本质上需要处理大量网络连接。 例如服务器监听: 0.0.0.0:80 客户端建立 TCP 连接后,操作系统会为连接提供对应的 Socket。 可以简单理解为: Client A ─── Socket A ──┐ Client B ─── Socket B ──┤ Client C ─── Socket C ──┤ Client D ─── Socket D ──┤ ▼ Web Server 假设现在有: 10000 个 TCP 连接 服务器需要解决一个问题:...

2024年06月20日 · 6 min · Leanku