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;




测试打印结果:

[root@localhost process]# php test.php
PROCESS STA RT:2018-11-02 14:27:04
PID:http://www.baidu.com
PID:http://www.360.com
PID:http://www.qq.com
PID:http://www.sina.com
PID:http://www.csdn.net
PID:http://www.163.com
PROCESS END:2018-11-02 14:27:05

看到了吗,虽然我们每个线程执行的时候,都消耗1s,但是开始的时间戳 跟结束的时仅仅有1s的时间间隔哦!

猜你喜欢

转载自blog.csdn.net/qq_17040587/article/details/83654819