在 PHP 中,实现单线程任务的并行处理可以通过以下几种方法:
使用 pcntl 扩展(Process Control):pcntl 扩展允许你创建子进程并等待它们完成。通过这种方式,你可以将任务分割成多个子任务,并在单独的进程中并行执行它们。但是,需要注意的是,pcntl 扩展在 Windows 系统上不可用。<?phpfunction task($id) { echo "Task $id started\n"; sleep(1); echo "Task $id finished\n";}$tasks = [1, 2, 3];foreach ($tasks as $id) { $pid = pcntl_fork(); if ($pid == -1) { die('could not fork'); } elseif ($pid) { // 父进程 pcntl_wait($status); } else { // 子进程 task($id); exit; }}?>使用 parallel 扩展:parallel 扩展提供了一个简单易用的接口来创建并行任务。首先,你需要安装并启用 parallel 扩展。然后,你可以使用 parallel_run() 函数来定义并行任务。<?phpfunction task($id) { echo "Task $id started\n"; sleep(1); echo "Task $id finished\n";}$tasks = [1, 2, 3];foreach ($tasks as $id) { parallel_run(function() use ($id) { task($id); });}?>使用 ReactPHP:ReactPHP 是一个事件驱动的非阻塞 I/O 框架,可以用来实现并发任务处理。你可以使用 ReactPHP 的 Process 类来创建子进程,并在其中执行任务。<?phprequire 'vendor/autoload.php';use React\EventLoop\Factory;use React\Process\Process;function task($id) { echo "Task $id started\n"; usleep(100000); echo "Task $id finished\n";}$loop = Factory::create();$tasks = [1, 2, 3];foreach ($tasks as $id) { $process = new Process(function() use ($id) { task($id); }, ['echo' => false]); $loop->addTimer(1, function() use ($process) { $process->sendSignal(SIGTERM); }); $process->start();}$loop->run();?>请注意,这些方法可能需要额外的配置或安装。在选择适合你项目的方法时,请确保考虑到你的需求和运行环境。