怎么在PHP中使用swoole操作多进程

  介绍

怎么在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;]);   ,,}   }

怎么在PHP中使用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;, 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操作多进程

关于怎么在PHP中使用swoole操作多进程问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

怎么在PHP中使用swoole操作多进程