在 PHP 中,可以使用 pcntl 擴展庫來創建和管理多進程。以下是一個簡單的示例,展示了如何使用 pcntl 擴展庫在 PHP 中分配任務:
<?php
// 任務函數
function task($arg) {
echo "Processing task with argument: $arg\n";
}
// 主進程
$num_workers = 5; // 要創建的工作進程數
$tasks_per_worker = 10; // 每個工作進程要處理的任務數
$tasks = range(1, $num_workers * $tasks_per_worker); // 生成任務列表
// 創建工作進程
$workers = [];
for ($i = 0; $i < $num_workers; $i++) {
$pid = pcntl_fork();
if ($pid == -1) {
die("Fork failed");
} elseif ($pid == 0) {
// 子進程
while (count($tasks) > 0) {
$task = array_shift($tasks);
task($task);
}
exit(0);
} else {
// 父進程
$workers[] = $pid;
}
}
// 等待所有工作進程完成
foreach ($workers as $pid) {
pcntl_wait($status);
}
echo "All tasks completed\n";
在這個示例中,我們首先定義了一個名為 task
的函數,該函數接受一個參數并輸出處理任務的信息。接下來,我們創建了 5 個工作進程,每個進程將處理 10 個任務。我們使用 pcntl_fork()
函數創建子進程,并在子進程中處理任務。最后,我們使用 pcntl_wait()
函數等待所有子進程完成。
請注意,這個示例僅適用于類 Unix 系統,如 Linux 和 macOS。在 Windows 上,可以使用 pcntl
的替代庫,如 pthreads
或 parallel
。