介绍
怎么在PHP中使用swoole操作多进程?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>多个任务同时执行强>
将顺序执行的任务,转化为并行执行(任务在逻辑上可以并行执行)
比如,我们要对已知的用户数据进行判断,是否需要发送邮件和短信,如果需要发送则发送。
不使用多进程时,我们首先判断是否发送邮件,如果需要则发送,然后再判断是否需要发送短信,如果需要则发送。如果发送邮件耗时2 s,发送短信耗时2 s,那么我们完成任务大概需要4 s左右的时间。
如果我们使用多线程的话,可以开两个线程,一个用于处理邮件,一个用于处理短信,则耗时一共需要2 s左右,处理时间缩短了一半。
& 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;]); ,,} }
<强>大任务划分成多个小任务强>
将循环执行的任务,划分为多个进程执行,提高工作效率
假设我们现在有一个通过卷发抓取网页内容的需求,需要抓取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;, true); 过程→美元才能开始(); 过程→美元才能写($ 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"; }
关于怎么在PHP中使用swoole操作多进程问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。