PHP不支持真正多线程,推荐Web场景用Swoole协程实现高并发I/O,CLI批量任务用pcntl_fork()多进程,简单HTTP并发可用curl_multi_init()或amphp。

PHP 本身不支持真正的多线程
PHP 默认运行在单线程模型下,pthread 扩展虽存在,但仅限 CLI 模式、不兼容绝大多数 Web SAPI(如 Apache mod_php 或 FPM),且从 PHP 7.4 起已停止维护。你看到的“多线程”需求,99% 实际要的是并发处理能力,不是共享内存+抢占式线程。
用 pcntl_fork() 模拟并发(Linux/macOS)
这是最接近“多进程并行”的标准方案,适合 CLI 下跑批量任务、定时脚本等场景:
-
pcntl_fork()会复制当前进程,父子进程独立运行,无共享变量(需用pcntl_wait()回收子进程,否则变僵尸) - 不能在 Web 环境用:Apache/FPM 会复用进程,
fork()可能破坏 worker 状态,导致崩溃或请求卡死 - 示例片段(启动 3 个子进程处理不同 ID):
$pids = [];
for ($i = 0; $i < 3; $i++) {
$pid = pcntl_fork();
if ($pid == -1) {
die('fork failed');
} elseif ($pid == 0) {
// 子进程
echo "Child {$i} processing\n";
exit(0);
} else {
$pids[] = $pid;
}
}
// 父进程等待全部结束
foreach ($pids as $pid) {
pcntl_waitpid($pid, $status);
}
Web 场景改用异步 I/O + 协程(推荐)
现代 PHP(8.1+)配合 Swoole 或 ReactPHP,能真正实现高并发 I/O 密集型任务,比如同时调多个 API、查多个数据库:
LxShop v2.0稳定版在修复已有bug的基础上,对功能和程序架构都做了进一步的加强和完善,管理权限与用户等级挂钩、多款在线支付网关以及多款网络即时通讯工具,都大大提高了LxShop v2.0的使用性。并且伴随着此次稳定版的发布,LxShop v2.0还推出了全新的页面风格,以供用户体验。可以说LxShop v2.0稳定版是所有LxShop开发者和支持者智慧的结晶。
-
Swoole\Coroutine\run()启动协程调度器,Swoole\Coroutine\Http\Client发起非阻塞 HTTP 请求 - 无需
fork,无进程开销,内存占用低,天然适配 FPM/Apache 外部代理(如 Nginx → Swoole TCP 端口) - 注意:Swoole 是扩展,需编译安装;
ext-swoole与opcache兼容性良好,但禁用register_shutdown_function在协程中可能失效
简单并发用 cURL multi 或 amphp
如果只是想并行发几个 HTTP 请求,又不想引入 Swoole:
立即学习“PHP免费学习笔记(深入)”;
-
curl_multi_init()是 PHP 内置方案,纯 C 实现,稳定、无额外依赖,适合中小规模并发(如 ≤ 20 个请求) -
amphp/http-client基于ext-uv或纯用户态事件循环,支持 PHP 7.4+,语法更现代,但需 Composer 加载 - 避免用
file_get_contents()循环调用 —— 它是同步阻塞的,5 个请求串行耗时 ≈ 5×单次延迟
pcntl_fork() 或交由 Go/Python 子进程处理。










