在PHP中,處理單線程并發主要是通過使用多進程來實現。PHP本身是單線程的,但可以通過pcntl擴展來創建子進程,從而實現并發處理。以下是一個簡單的示例:
<?php
function worker($pid) {
echo "Worker process {$pid} started.\n";
// 在這里執行你的并發任務
sleep(5); // 假設每個子進程需要處理5秒鐘的任務
echo "Worker process {$pid} finished.\n";
}
$num_workers = 5; // 想要創建的子進程數量
for ($i = 0; $i < $num_workers; $i++) {
$pid = pcntl_fork();
if ($pid == -1) {
die("fork failed\n");
} elseif ($pid) {
// 父進程邏輯
echo "Parent process {$i} created child process {$pid}.\n";
} else {
// 子進程邏輯
worker($i);
exit;
}
}
while (pcntl_wait($status) != -1) {
$status = pcntl_wexitstatus($status);
echo "Child process {$status} terminated.\n";
}
在這個示例中,我們定義了一個名為worker
的函數,它將在子進程中執行。然后,我們使用pcntl_fork()
函數創建了指定數量的子進程。每個子進程都會調用worker
函數來執行并發任務。父進程會等待所有子進程完成后才退出。
需要注意的是,pcntl
擴展在Windows平臺上不可用。在Windows上實現多進程可以使用其他方法,例如使用Process
類(在PHP 7.2及更高版本中可用)或者使用第三方庫,如symfony/process
。