swoole多程序應用案例:swoole_process
阿新 • • 發佈:2018-12-19
模擬一個多程序的場景: 仿照我們需要把幾個網站的內容獲取過來,最快的多程序獲取方式: 如:我們需要百度、360、騰訊、新浪、csdn、163首頁內容。 解決思路: 按照傳統的思想,通過file_get_contents() 迴圈執行,我做了一個測試,獲取百度大概消耗了6s多把網站獲取完成,也就是這麼執行下來大概6*(6秒+) 如此方式執行至少需要半分多鐘,相當費勁!
echo "PROCESS STA RT:".date("Y-m-d H:i:s").PHP_EOL; //我們用多執行緒來解決這個問題 我們充分發揮計算機的效能,高效的來實現這個問題 //初始化任務地址陣列 $urls = [ 'http://www.baidu.com', 'http://www.360.com', 'http://www.qq.com', 'http://www.sina.com', 'http://www.csdn.net', 'http://www.163.com' ]; $workers=[];//初始化一個數組 回收執行緒管道內容 //按照任務分配執行緒 for($i=0;$i<count($urls);$i++){ $process = new swoole_process(function(swoole_process $woker) use($urls,$i){ //為了程式碼工整檢視案例結果 我們寫一個模擬獲取頁面方法 實際獲取得到的文件太大不變檢視 也不容易核對好使時間 $content = curlData($urls[$i]); echo $content; },true);//true 配置後 讓執行緒列印內容輸出到管道 $pid = $process->start(); $workers[$pid] = $process; } //模擬執行耗時任務函式 function curlData($url){ //實際中應該寫 file_get_contents($url); //模擬耗時1秒 sleep(1); return $url.PHP_EOL; } //列印管道內容 foreach($workers as $k=>$pro){ echo "PID:".$pro->read(); } echo "PROCESS END:".date("Y-m-d H:i:s").PHP_EOL;
測試列印結果:
看到了嗎,雖然我們每個執行緒執行的時候,都消耗1s,但是開始的時間戳 跟結束的時僅僅有1s的時間間隔哦!