1. 程式人生 > >swoole多程序應用案例:swoole_process

swoole多程序應用案例:swoole_process

模擬一個多程序的場景: 仿照我們需要把幾個網站的內容獲取過來,最快的多程序獲取方式: 如:我們需要百度、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的時間間隔哦!