prefork为纯进程型,稳定但内存高;worker为进程-线程混合型,资源利用率高但需模块线程安全;event为事件驱动型,专优长连接,https下不支持。

Apache 的核心差异不在功能,而在它怎么“干活”——关键就是进程模型。选对模型,资源不浪费、服务不卡顿;选错,轻则响应慢,重则内存爆满、请求排队。
Prefork:一个请求一个进程,稳但吃内存
这是最老也最稳妥的模式。主进程启动时就预先拉起一批子进程(StartServers),空闲时维持在 MinSpareServers 到 MaxSpareServers 之间。每个子进程只干一件事:处理一个 HTTP 连接,全程同步阻塞。
- 优点:进程完全隔离,PHP 等非线程安全模块能直接跑,崩溃不影响其他请求
- 缺点:每个进程独占内存(通常 2–10 MB),并发一高,内存和进程切换开销迅速飙升
- 适用场景:中小流量、依赖传统 mod_php、稳定性优先的环境
Worker:进程 + 线程,省资源但要线程安全
它用“少量进程 + 多个线程”替代纯进程。每个子进程启动时创建固定数量的服务线程(由 ThreadsPerChild 控制),再加一个专用监听线程。连接进来后,监听线程分发给空闲工作线程处理。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 优点:线程共享进程内存,整体内存占用比 Prefork 低得多,适合更高并发
- 缺点:所有加载模块(比如 PHP、SSL、自定义模块)必须是线程安全的,否则可能数据错乱或崩溃
- 注意:MaxRequestWorkers = 子进程数 × 每进程线程数,不是单纯看进程数
Event:专为长连接优化的事件驱动模型
这是 Worker 的升级版,核心思路是“解耦监听与处理”。监听线程只管收新连接、注册到事件队列;工作线程从队列里拿活跃连接做读写,处理完立刻归还,不被 keep-alive 占着不动。
- 优势:单线程可管理数百个空闲长连接,CPU 和内存效率明显提升
- 限制:Apache 2.4 中已稳定,但 HTTPS 下不支持 event MPM(需回退到 worker 或用反向代理卸载 TLS)
- 典型配置中,MaxRequestWorkers 表示最大并发请求数,而非线程总数
三种模型不是简单的新旧迭代,而是适配不同负载特征的工具。静态小站用 Prefork 很安心;动态内容多、并发上千,Worker 更划算;而大量移动端长连接或 WebSocket 场景,Event 才是更优解。










