swoole多进程操作的示例

  介绍

这篇文章将为大家详细讲解有关swoole多进程操作的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>多个任务同时执行

将顺序执行的任务,转化为并行执行(任务在逻辑上可以并行执行)

比如,我们要对已知的用户数据进行判断,是否需要发送邮件和短信,如果需要发送则发送。

不使用多进程时,我们首先判断是否发送邮件,如果需要则发送,然后再判断是否需要发送短信,如果需要则发送。如果发送邮件耗时2 s,发送短信耗时2 s,那么我们完成任务大概需要4 s左右的时间。

如果我们使用多线程的话,可以开两个线程,一个用于处理邮件,一个用于处理短信,则耗时一共需要2 s左右,处理时间缩短了一半。

<>强推荐(免费):swoole

& lt; ? php/* *   ,* Created  by  PhpStorm。   ,*用户:zhezhao   ,*日期:2016/10/20   *大敌;时间:37   ,*/info 美元;=,数组(,,,“sendmail"=祝辞;1,,,,,“mailto"=祝辞;“12345 @qq.com",,,,,“sendsms"=祝辞;1,,,,,“smsto"=祝辞;“123456“);echo “开始:“.date (“Y-m-d  H:我:s") .PHP_EOL; mail_process 美元;=,new  swoole_process (& # 39; sendMail # 39;, true); mail_process→美元开始();sms_process 美元;=,new  swoole_process (& # 39; sendsms # 39;, true); sms_process→美元开始();//主进程输出子进程范围内容echo 美元mail_process→读();echo  PHP_EOL; echo 美元sms_process→读();echo  PHP_EOL; echo “结束:“.date (“Y-m-d  H:我:s") .PHP_EOL;//并行函数function  sendMail (swoole_process 工人美元){   ,,,global 信息;美元,,,,如果($ info (& # 39; sendmail # 39;)==1) {   ,,,,,,,(2)睡觉,,,,,,,,,工人→美元写(“send  mail 用“。美元信息[& # 39;mailto # 39;]);   ,,,}   }function  sendSMS (swoole_process 工人美元){   ,,,global 信息;美元,,,,如果($ info (& # 39; sendmail # 39;)==1) {   ,,,,,,,(2)睡觉,,,,,,,,,工人→美元写(“send  sms 用“。美元信息[& # 39;smsto& # 39;]);   ,,,}   }

 swoole多进程操作的示例

<强>大任务划分成多个小任务

将循环执行的任务,划分为多个进程执行,提高工作效率

假设我们现在有一个通过卷发抓取网页内容的需求,需要抓取10个网页,url地址通过数组读取,每个curl耗时2 s。如果我们通过对循环来抓取这10个网页,需要耗20年代时,使用多进程我们可以将任务划分成5份,分别由5个进程执行,每个进程抓取2个url,并发执行,共耗时4 s,效率提高5倍。

& lt; ? php/* *   ,* Created  by  PhpStorm。   ,*用户:zhezhao   ,*日期:2016/10/20   *大敌;时间:10:51   ,*/url_arr 美元;=,数组();for  (i=0; i<美元;10美元我+ +){,,,美元url_arr [],=,“www.baidu.com ? wd=拔颐涝?   }echo “开始:“.date (“Y-m-d  H:我:s") .PHP_EOL; workers 美元;=,数组();for  (i=0; i<美元;5美元我+ +){,,,process 美元;=,new  swoole_process (& # 39; getcontents # 39;,真的),,,,,过程→美元开始(),,,,,美元过程→写($ i);,,,,工人[],美元=,美元的过程;   }//主进程数据结果foreach  (workers 美元;as 过程美元){,,,echo 美元过程→读(),,,,,echo  PHP_EOL;   }echo “结束:“.date (“Y-m-d  H:我:s") .PHP_EOL; function  getContents (swoole_process 工人美元){   ,,,小姐:美元=,美元工人→读(),,,,,global  url_arr美元;,,,,res1 美元;=,execCurl ($ url_arr[(我* 2美元)]),,,,,res2 美元;=,execCurl ($ url_arr [($ i * 2 + 1)]),,,,, echo  res1.PHP_EOL美元。$它;   }function  execCurl ($ url) {   睡眠,,,(2),,,,,return “handle “。美元干净自己的url, finished";   }

 swoole多进程操作的示例

以上两种情况,本质上都是将逻辑上没有先后关系的任务,用多个进程程并发执行,提高效率。

php机制本身不提供多线程的操作,竞购扩展提供了php操作linux多进程的接口。

个人感觉swoole的多进程处理方法更加方便一些。

关于“swoole多进程操作的示例”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

swoole多进程操作的示例