swoole多進程操作的示例

這篇文章將為大家詳細講解有關(guān)swoole多進程操作的示例,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站制作、成都網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)東城,十多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

多個任務(wù)同時執(zhí)行

將順序執(zhí)行的任務(wù),轉(zhuǎn)化為并行執(zhí)行(任務(wù)在邏輯上可以并行執(zhí)行)

比如,我們要對已知的用戶數(shù)據(jù)進行判斷,是否需要發(fā)送郵件和短信,如果需要發(fā)送則發(fā)送。

不使用多進程時,我們首先判斷是否發(fā)送郵件,如果需要則發(fā)送;然后再判斷是否需要發(fā)送短信,如果需要則發(fā)送。如果發(fā)送郵件耗時2s,發(fā)送短信耗時2s,那么我們完成任務(wù)大概需要4s左右的時間。

如果我們使用多線程的話,可以開兩個線程,一個用于處理郵件,一個用于處理短信,則耗時一共需要2s左右,處理時間縮短了一半。

推薦(免費):swoole

<?php/**
 * Created by PhpStorm.
 * User: zhezhao
 * Date: 2016/10/20
 * Time: 10:37
 */$info = array(    "sendmail"=>1,    "mailto"=>"12345@qq.com",    "sendsms"=>1,    "smsto"=>"123456");echo "start:".date("Y-m-d H:i:s").PHP_EOL;$mail_process = new swoole_process('sendMail',true);$mail_process->start();$sms_process = new swoole_process('sendSMS',true);$sms_process->start();//主進程輸出子進程范圍內(nèi)容echo $mail_process->read();echo PHP_EOL;echo $sms_process->read();echo PHP_EOL;echo "end:".date("Y-m-d H:i:s").PHP_EOL;//并行函數(shù)function sendMail(swoole_process $worker){
    global $info;    if($info['sendmail']==1){
        sleep(2);        $worker->write("send mail to ".$info['mailto']);
    }
}function sendSMS(swoole_process $worker){
    global $info;    if($info['sendmail']==1){
        sleep(2);        $worker->write("send sms to ".$info['smsto']);
    }
}

swoole多進程操作的示例

大任務(wù)劃分成多個小任務(wù)

將循環(huán)執(zhí)行的任務(wù),劃分為多個進程執(zhí)行,提高工作效率

假設(shè)我們現(xiàn)在有一個通過curl抓取網(wǎng)頁內(nèi)容的需求,需要抓取10個網(wǎng)頁,url地址通過數(shù)組讀取,每個curl耗時2s。如果我們通過for循環(huán)來抓取這10個網(wǎng)頁,需要耗時20s,使用多進程我們可以將任務(wù)劃分成5份,分別由5個進程執(zhí)行,每個進程抓取2個url,并發(fā)執(zhí)行,共耗時4s,效率提高5倍。

<?php/**
 * Created by PhpStorm.
 * User: zhezhao
 * Date: 2016/10/20
 * Time: 10:51
 */$url_arr = array();for ($i=0;$i<10;$i++){    $url_arr[] = "www.baidu.com?wd=".$i;
}echo "start:".date("Y-m-d H:i:s").PHP_EOL;$workers = array();for ($i=0;$i<5;$i++){    $process = new swoole_process('getContents',true);    $process->start();    $process->write($i);    $workers[] = $process;
}//主進程數(shù)據(jù)結(jié)果foreach ($workers as $process){    echo $process->read();    echo PHP_EOL;
}echo "end:".date("Y-m-d H:i:s").PHP_EOL;function getContents(swoole_process $worker){
    $i = $worker->read();    global $url_arr;    $res1 = execCurl($url_arr[($i*2)]);    $res2 = execCurl($url_arr[($i*2+1)]);    echo $res1.PHP_EOL.$res2;
}function execCurl($url){
    sleep(2);    return "handle ".$url." finished";
}

swoole多進程操作的示例

以上兩種情況,本質(zhì)上都是將邏輯上沒有先后關(guān)系的任務(wù),用多個進程程并發(fā)執(zhí)行,提高效率。

php機制本身不提供多線程的操作,ptcl擴展提供了php操作linux多進程的接口。

個人感覺swoole的多進程process方法更加方便一些。

關(guān)于“swoole多進程操作的示例”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

文章名稱:swoole多進程操作的示例
文章出自:http://bm7419.com/article38/iipppp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、微信公眾號品牌網(wǎng)站制作、虛擬主機、用戶體驗ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)