php怎么实现并发
PHP 实现并发的方法
PHP 本身是单线程语言,但可以通过多种方式实现并发处理。以下是几种常见的实现方法:
多进程处理(PCNTL 扩展)
使用 pcntl_fork 创建子进程实现并发。适用于 CLI 模式,不适用于 Web 环境。
$pid = pcntl_fork();
if ($pid == -1) {
die('Could not fork');
} elseif ($pid) {
// 父进程
pcntl_wait($status); // 等待子进程结束
} else {
// 子进程
// 执行并发任务
exit();
}
多线程处理(Pthreads 扩展)
PHP 通过 Pthreads 扩展支持多线程,但仅适用于 CLI 模式且 PHP 7+ 版本。

class MyThread extends Thread {
public function run() {
// 线程执行的任务
}
}
$thread = new MyThread();
$thread->start();
$thread->join();
异步非阻塞(Swoole 扩展)
Swoole 提供了高性能的异步并发框架,支持协程和事件驱动。
// 创建 HTTP 服务器
$server = new Swoole\Http\Server("0.0.0.0", 9501);
$server->on("request", function ($request, $response) {
// 异步处理请求
$response->end("Hello World");
});
$server->start();
消息队列(RabbitMQ/Redis)
使用消息队列实现任务异步处理,适用于分布式系统。

// Redis 队列示例
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 生产者
$redis->lPush('task_queue', json_encode(['task' => 'data']));
// 消费者
while ($task = $redis->rPop('task_queue')) {
$data = json_decode($task, true);
// 处理任务
}
Gearman 分布式任务系统
Gearman 提供分布式任务分发机制,适合处理大量并发任务。
$client = new GearmanClient();
$client->addServer();
// 异步执行任务
$client->doBackground('reverse', 'Hello World');
协程(Coroutine)
PHP 8.1+ 内置纤程(Fiber)支持轻量级协程。
$fiber = new Fiber(function() {
Fiber::suspend();
// 协程逻辑
});
$fiber->start();
$fiber->resume();
并行 HTTP 请求(Guzzle 异步)
使用 Guzzle 的异步客户端实现并发 HTTP 请求。
$client = new GuzzleHttp\Client();
$promises = [
$client->getAsync('http://example.com'),
$client->getAsync('http://example.org')
];
$results = GuzzleHttp\Promise\unwrap($promises);
注意事项
- Web 环境下通常采用异步任务队列或外部服务实现并发
- CLI 模式下可使用多进程/多线程扩展
- 高并发场景推荐使用 Swoole 或 OpenSwoole 等专用框架
- 分布式系统建议采用消息队列解耦任务处理
选择具体方案时应考虑 PHP 运行环境、性能需求和系统架构特点。






