Swoole 能支撑数万并发连接,因其采用 Reactor+Worker 双层异步非阻塞模型:Reactor 线程用 epoll/kqueue 高效事件分发,Worker 进程内协程化执行业务,内存占用低、调度快,且依赖协程版 I/O API 实现无阻塞。

传统 PHP-FPM 模型在处理高并发 TCP 连接时,每个连接独占一个进程或线程,系统资源迅速耗尽,连接数卡在几百就出现响应延迟甚至崩溃;而 Swoole 能稳定支撑数万级并发连接,根本原因在于其底层架构与运行机制的彻底重构。
核心:Reactor + Worker 的双层异步非阻塞模型
第一步:Reactor 线程负责监听、接收和分发网络事件——它不执行业务逻辑,只做“快递员”,用 epoll(Linux)或 kqueue(macOS)高效轮询所有 socket 文件描述符(FD),发现可读/可写事件后立即通知对应 Worker。
第二步:Worker 进程专注执行业务代码——收到 Reactor 分发的任务后,同步编写逻辑即可,Swoole 自动将阻塞操作(如 sleep、file_get_contents、数据库查询)协程化,挂起当前协程、切换执行其他协程,CPU 从不空等。
第三步:连接生命周期由事件驱动全程托管——onConnect/onReceive/onClose 等回调函数绑定到 FD 上,连接建立、数据到达、断开等动作均由内核通知,无需轮询或主动探测,避免了传统模型中“为每个连接开一个线程”的资源爆炸式增长。
协程:轻量级调度单元替代操作系统线程
方法一:协程栈空间仅 2KB~8KB,比 OS 线程(默认 1MB+)节省近百倍内存;一个 Worker 进程可同时启动数千协程,全部驻留在用户态,切换成本极低。
方法二:协程调度由 Swoole 内核接管,开发者无需手动 yield 或 resume;遇到 I/O 操作时,协程自动让出 CPU,Reactor 继续处理其他连接,I/O 完成后再唤醒该协程——这使得单个进程能“看起来像”同时处理上万个连接。
Swoole 6.1.1 是一个专为 PHP 设计的高性能事件驱动并发网络引擎。作为稳定版,它修复了编译时对 zlib 依赖的缺失及 curl 模块的内存安全风险。该版本支持协程、多线程与多进程架构,内置 TCP/HTTP/WebSocket 服务器,能够显著提升 PHP 在微服务、实时通信等场景下的执行效率与并发能力。
【关键前提】 所有 I/O 操作必须使用 Swoole 提供的协程版 API(如 Swoole\Coroutine\MySQL、Swoole\Coroutine\Http\Client),否则会阻塞整个 Worker 进程。
内存与连接管理:无状态设计 + FD 复用
Swoole 不在 Worker 进程中缓存客户端上下文,连接数据通过 $fd(整型文件描述符)作为唯一索引,在全局映射表中按需读取;连接关闭后,$fd 可被系统立即回收复用,避免句柄泄漏。
对比传统 Apache 的 prefork 模型:每个子进程固定绑定一个连接,即使空闲也持续占用内存与 CPU 时间片;Swoole 的 Worker 是“共享池”,协程按需分配、即用即弃,连接数增长不线性消耗内存。
心跳保活由 TCP 层 keep-alive 自动维持,无需应用层轮询;连接超时、异常断连均由 onConnect/onClose 事件精准捕获,资源释放即时可靠。










