php 实现并发
在 PHP 中实现并发可以通过多种方式实现,以下是几种常见的方法:
多进程方式(PCNTL 扩展)
PHP 的 PCNTL 扩展提供了多进程操作的能力,适合在 CLI 环境下使用。通过 pcntl_fork() 可以创建子进程。
$pid = pcntl_fork();
if ($pid == -1) {
die('Could not fork');
} elseif ($pid) {
// 父进程
pcntl_wait($status); // 等待子进程结束
} else {
// 子进程
// 执行并发任务
exit();
}
多线程方式(pthreads 扩展)
pthreads 扩展允许 PHP 使用多线程,但需要注意线程安全问题。仅适用于 CLI 环境。
class MyThread extends Thread {
public function run() {
// 线程执行的代码
}
}
$thread = new MyThread();
$thread->start();
$thread->join();
协程方式(Swoole 扩展)
Swoole 是一个高性能的 PHP 协程框架,支持协程并发。
Swoole\Runtime::enableCoroutine();
go(function () {
// 协程1
});
go(function () {
// 协程2
});
异步非阻塞方式(ReactPHP)
ReactPHP 是一个基于事件驱动的库,可以实现异步非阻塞并发。
$loop = React\EventLoop\Factory::create();
$loop->addTimer(0.1, function () {
// 异步任务1
});
$loop->addTimer(0.2, function () {
// 异步任务2
});
$loop->run();
队列方式(Gearman)
Gearman 是一个分布式任务分发系统,可以实现任务的并行处理。
$client = new GearmanClient();
$client->addServer();
$client->doBackground('task1', 'data1');
$client->doBackground('task2', 'data2');
注意事项
- PCNTL 和 pthreads 仅适用于 CLI 环境。
- Swoole 和 ReactPHP 需要安装对应的扩展。
- 并发编程需要注意资源竞争和同步问题。







