swoole通过多进程模型和任务调度机制充分发挥多核CPU性能,建议设置worker_num为swoole_cpu_num()获取的核心数,利用Task Worker处理耗时任务并合理分配进程类型,实现CPU与I/O资源的均衡利用。
Swoole 能充分发挥多核 CPU 的性能,关键在于其提供的多进程模型和任务调度机制。通过合理配置工作进程和利用异步非阻塞特性,Swoole 可以让每个 CPU 核心都参与处理请求,从而显著提升服务的并发能力和吞吐量。
启用多进程模式充分利用CPU核心
Swoole 默认使用多进程模式运行,Master 进程负责网络事件监听,而多个 Worker 进程负责实际业务处理。为了充分利用多核 CPU,应将 Worker 进程数设置为与 CPU 核心数相当。
建议:
- 通过 swoole_cpu_num() 函数自动获取 CPU 核心数,并据此设置 Worker 数量
- 例如:$server->set(['worker_num' => swoole_cpu_num()]);
- 这样可以避免进程过少导致核心闲置,或过多造成上下文切换开销
使用 Task Worker 处理耗时任务
对于数据库查询、文件读写等阻塞操作,Swoole 提供了 Task Worker 机制。将这些任务投递给独立的 Task 进程处理,不会阻塞主 Worker 进程,保证网络请求的快速响应。
建议:
- 设置适量的 task_worker_num(通常为 CPU 核心数的 1-2 倍)
- 在 onWorkerStart 中初始化数据库连接等资源,减少重复开销
- 通过 $server->task() 发送任务,在 onFinish 回调中返回结果
合理分配进程类型避免资源竞争
Swoole 支持同时运行事件型 Worker 和任务型 Task Worker。正确划分职责能让不同类型的任务在不同进程中并行执行。
- Event Worker 处理 http 请求、websocket 消息等 I/O 密集型操作
- Task Worker 专注执行 CPU 密集型或阻塞型逻辑
- 两者协同工作,使 CPU 和 I/O 资源得到均衡利用
基本上就这些。只要配置得当,Swoole 能自然地把负载分散到各个 CPU 核心上,无需额外线程管理,就能实现高性能的并行处理。