const TASK_NUM = 10; // 任务数 | |
const MAX_PROCESS = 3; // 最大进程数量,并发控制 | |
$running = 0; // 记录正在运行的子进程数 | |
for ($i = 0; $i < TASK_NUM; $i++) { | |
$pid = pcntl_fork(); // 开启新进程 | |
if ($pid == -1) { | |
die("could not fork"); // 开启失败 | |
} elseif ($pid) { | |
// 父进程逻辑 | |
// echo "父进程逻辑 \n"; | |
$running++; // 进程数+1 | |
if ($running >= MAX_PROCESS) { // 子进程开启数量达到上限 | |
pcntl_wait($status); // 等待有子进程退出 | |
$running--; // 有子进程退出,进程数-1 | |
} | |
// echo "父进程逻辑end \n"; | |
} else { | |
// 子进程逻辑 | |
echo "子进程逻辑 \n"; | |
$ss = rand(1, 20); | |
echo "child:$i, sleep $ss second... \n"; | |
sleep($ss); | |
echo "child:$i, finish sleep.\n"; | |
exit(0); // 子进程逻辑结束,注意退出点 | |
} | |
} | |
// 等待所有子进程都结束 | |
while ($running) { | |
pcntl_wait($status); | |
$running--; | |
} | |
echo "done.\n\n"; |
php 多进程fork
PHP技术
574
0
0
2023-02-01
登录后可点赞和收藏
登录后可点赞和收藏