webman 的高效源于设计克制而非协程池更快:依托 swoole 原生协程调度,无 di/aop/注解等运行时开销,连接池直用 swoole 协程客户端,视图默认同步,启动零反射扫描,适合高 i/o、低延迟场景。

Webman 的协程池并非“比 Hyperf 2 更高效”,而是设计目标不同、实现路径更轻量,从而在特定场景下表现出更低开销与更高吞吐。关键不在“协程池本身更快”,而在于 Webman 把协程调度、I/O 绑定和资源复用压到了更底层、更克制的层面。
协程池不是独立模块,而是 Workerman + Swoole 原生能力的自然延伸
Webman 不自己造轮子实现协程池管理器。它直接依托 Swoole 的 Swoole\Coroutine 和 Workerman 的事件循环,在每个 Worker 进程内由 Swoole 内核统一调度协程。
- 没有额外的协程生命周期代理层
- 不做协程上下文注入、AOP 切面拦截、依赖注入容器绑定等运行时增强
- 协程启动即执行,结束即回收,无中间抽象损耗
Hyperf 2(尤其搭配 DI 容器与注解扫描)会在协程启动时自动完成:
- 容器实例查找与注入
- AOP 代理对象生成(如 @Transaction、@Cacheable)
- 注解元数据解析与反射调用
这些操作虽带来开发便利,但每次协程启动都需执行,构成固定开销。
连接池复用策略更贴近业务直觉,避免过度抽象
Webman 默认不强制封装数据库/Redis 连接池,而是鼓励开发者直接使用 Swoole\Coroutine\MySQL 或 Swoole\Coroutine\Redis ——它们本身就是协程安全、连接复用、自动回收的。
- 连接获取是纯函数调用,无代理层转发
- 连接归属明确(绑定到当前协程 UID),无需跨协程同步锁
- 错误时可快速重建,不污染全局连接状态
Hyperf 2 的 Hyperf\Pool\SimplePool 或 Hyperf\Database\Pool\ConnectionPool 虽功能完整,但增加了:
- 池状态管理(idle、busy、create、destroy 等状态机)
- 回调钩子链(beforeAcquire / afterRelease)
- 容器驱动的连接工厂封装
这些在万级并发下会放大 CPU 时间片竞争。
视图与模板渲染不默认参与协程调度,规避阻塞风险
Webman 默认视图渲染(如 view()->render())仍是同步执行,但正因如此,它不试图把模板编译、文件读取、变量赋值全部协程化,反而减少了错误阻塞点。当需要异步能力时,开发者可按需封装(例如用 defer 预热、用 go 启动子协程加载外部数据),控制粒度更细。
Hyperf 2 的 Hyperf\View 组件为“全协程就绪”做了大量适配:
- 自动将
file_get_contents替换为协程版 - 编译缓存写入走协程文件锁
- 支持 Promise 式模板嵌套
但这也意味着——只要用了它的视图引擎,就必须承担整条链路的协程调度成本,无法降级为轻量同步路径。
启动阶段零反射扫描,协程环境初始化极快
Webman 应用启动时:
- 不扫描注解(无
@Inject、@Value、@Aspect) - 不构建代理类(无
Proxy类动态生成) - 不预加载服务提供者元信息(
providers.php是静态数组)
协程环境在start.php执行完毕后即就绪,毫秒级完成。
Hyperf 2 启动需完成:
- 注解扫描(全目录
.php文件解析 AST) - 代理类生成(
_proxy.php写入 runtime) - DI 容器注册(含懒加载、单例、工厂等复杂绑定)
这部分耗时在大型项目中可达数百毫秒,且每次 reload 都重复执行。
本质上,Webman 的“高效”来自克制:它把协程当作基础设施来用,而不是作为开发范式来推广。它不阻止你写协程友好代码,但也不替你决定哪些该协程化、哪些该保持同步。这种低干预的设计,在 AI 漫剧平台这类 I/O 密集、逻辑链路清晰、需极致响应的场景中,反而释放了最大性能冗余。











