PHP 异步编程:使用 Swoole 实现高并发任务处理
一、同步 VS 异步:PHP 的性能瓶颈
传统 PHP-FPM 是 “同步阻塞” 模型:
每个请求对应一个 FPM 进程,进程处理完请求后释放;
若请求中包含耗时操作(如发送邮件、调用第三方接口、文件上传),进程会阻塞等待,无法处理其他请求;
高并发下,FPM 进程数耗尽,新请求排队,响应变慢。
异步编程:耗时操作交给后台处理,主进程立即返回响应,提升并发能力。
二、Swoole 基础
Swoole 是 PHP 的异步扩展,支持协程、异步 IO、进程 / 线程管理:
1. 安装 Swoole
2. 核心概念
协程:轻量级线程,一个进程可创建上万协程,切换开销极低;
事件循环:Swoole 的核心,监听 IO 事件(如网络、文件),异步处理;
异步任务:将耗时操作投递到 TaskWorker 进程处理,不阻塞主进程。
三、Swoole 实战案例
案例 1:异步邮件发送
运行脚本:php server.php,访问http://localhost:9501提交注册请求,会立即返回响应,3 秒后邮件日志生成。
案例 2:定时任务
四、Swoole 使用注意事项
协程安全:避免在协程中使用全局变量,如需共享数据,使用
Swoole\Coroutine\Channel;框架兼容:Laravel/Symfony 等框架需适配 Swoole,推荐使用 Hyperf/EasySwoole 等基于 Swoole 的框架;
内存管理:异步任务中及时释放资源(如数据库连接),避免内存泄漏;
异常处理:在协程 / 任务中添加 try-catch,避免单个任务异常导致进程退出。