多進程使用
怎么才能在一個php腳本中,開啟多進程處理呢?這里我們可以使用2種方法(注意,本教程只適用于linux,php-cli環境)
pcntl擴展
pcntl是php官方的多進程擴展,只能在linux環境使用,例如:
<?php
$num=1;
$str="EasySwoole,Easy學swoole\n";
$pid = pcntl_fork();//新開一個子進程,上面的變量內存將會復制一份到子進程中.這個函數,在主進程中返回子進程進程id,在子進程返回0,開啟失敗在主進程返回-1
echo $str;//這下面的代碼,將會被主進程,子進程共同執行
if($pid>0){//主進程代碼
echo "我是主進程,子進程的pid是{$pid}\n";
}elseif($pid==0){
echo "我是子進程,我的pid是".getmypid()."\n";
}else{
echo "我是主進程,我現在慌得一批,開啟子進程失敗了\n";
}
詳細內容可自行搜索了解
swoole擴展
swoole擴展是面向生產環境的 PHP 異步網絡通信引擎,它也有著進程管理模塊
<?php
$num = 1;
$str = "EasySwoole,Easy學swoole\n";
$process = new swoole_process(function () use ($str) {//實例化一個進程類,傳入回調函數
echo $str;//變量內存照常復制一份,只不過swoole的開啟子進程后使用的是回調方法運行
echo "我是子進程,我的pid是" . getmypid() . "\n";
});
$pid = $process->start();//開啟子進程,創建成功返回子進程的PID,創建失敗返回false。
echo $str;
if ($pid > 0) {//主進程代碼
echo "我是主進程,子進程的pid是{$pid}\n";
}else{
echo "我是主進程,我現在不慌了,失敗就失敗吧\n";
}
詳細內容可自行搜索了解