亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swoole多進程操作的示例

發布時間:2021-03-03 11:28:36 來源:億速云 閱讀:190 作者:小新 欄目:編程語言

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

多個任務同時執行

將順序執行的任務,轉化為并行執行(任務在邏輯上可以并行執行)

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

不使用多進程時,我們首先判斷是否發送郵件,如果需要則發送;然后再判斷是否需要發送短信,如果需要則發送。如果發送郵件耗時2s,發送短信耗時2s,那么我們完成任務大概需要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();//主進程輸出子進程范圍內容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;//并行函數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多進程操作的示例

大任務劃分成多個小任務

將循環執行的任務,劃分為多個進程執行,提高工作效率

假設我們現在有一個通過curl抓取網頁內容的需求,需要抓取10個網頁,url地址通過數組讀取,每個curl耗時2s。如果我們通過for循環來抓取這10個網頁,需要耗時20s,使用多進程我們可以將任務劃分成5份,分別由5個進程執行,每個進程抓取2個url,并發執行,共耗時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;
}//主進程數據結果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多進程操作的示例

以上兩種情況,本質上都是將邏輯上沒有先后關系的任務,用多個進程程并發執行,提高效率。

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

克什克腾旗| 烟台市| 花莲市| 顺昌县| 英山县| 汨罗市| 隆回县| 抚顺县| 九龙坡区| 荃湾区| 海南省| 德州市| 陇西县| 噶尔县| 密云县| 古蔺县| 白河县| 侯马市| 寻乌县| 安化县| 忻城县| 壤塘县| 吉隆县| 汉沽区| 板桥市| 比如县| 崇左市| 屯昌县| 奉节县| 新余市| 锡林郭勒盟| 新疆| 连州市| 三门峡市| 安乡县| 乐东| 舒城县| 凉城县| 时尚| 许昌市| 加查县|