PHP 自帶的 pcntl,存在很多不足,如:
- 沒有提供行程間通信的功能;
- 不支持重定向標準輸入和輸出;
- 只提供了
fork這樣原始的介面,容易使用錯誤;
Swoole\Process 提供了如下特性:
- 可以方便的實作行程間通訊;
- 支持重定向標準輸入和輸出,在子行程內
echo不會列印螢屏,而是寫入管道,讀鍵盤輸入可以重定向為管道讀取資料; - 提供了
Swoole\Process->exec()介面,創建的行程可以執行其他程式,與原PHP父行程之間可以方便的通信; - 在協程環境中無法使用
Swoole\Process模塊,可以使用runtime hook+proc_open實作,參考協程行程管理;
使用示例:
use Swoole\Process;
// 主行程創建 3 個子行程
for ($n = 1; $n <= 3; $n++) {
$process = new Process(function () use ($n) {
echo 'Child #' . getmypid() . " start and sleep {$n}s" . PHP_EOL;
sleep($n);
echo 'Child #' . getmypid() . ' exit' . PHP_EOL;
});
$process->start();
}
// 主行程用 wait 回收子行程
for ($n = 3; $n--;) {
$status = Process::wait(true);
echo "Recycled #{$status['pid']}, code={$status['code']}, signal={$status['signal']}" . PHP_EOL;
}
echo 'Parent #' . getmypid() . ' exit' . PHP_EOL;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/5066.html
標籤:PHP
上一篇:php實作統計IP數及在線人數
