$workers = [];// 程序倉庫
$worker_num = ;// 最大程序數
// 循環建立子程序
for($i = ; $i < $worker_num; $i++){
$process = new swoole_process('callback_function', false, false);
$process->useQueue();// 開啟隊列使用,類似于全局隊列
$pid = $process->start();//開啟程序
$workers[$pid] = $process;// 存入句柄倉庫
}
// 子程序執行函數
function callback_function(swoole_process $worker){
$recv = $worker->pop();// 擷取隊列資料
echo "從主程序擷取資料: $recv\n";
sleep();//睡覺2秒
$worker->exit();// 目前子程序結束
}
// 主程序内,新增隊列資料
foreach($workers as $pid => $process){
$process->push("Hello 子程序[$pid]\n");
}
// 兩次等待子程序結束
for($i = ; $i < $worker_num; $i++){
// 回收子程序 否則出現僵屍程序
$ret = swoole_process::wait();// 回收結束運作的子程序,如果子程序結束。類似于 join
$pid = $ret['pid'];
unset($workers[$pid]);
echo "子程序退出, PID=".$pid.PHP_EOL;
}