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