各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP基于swoole多进程操作示例

管理员 2023-09-05
PHP
101

PHP基于swoole多进程操作示例

内容导读

收集整理的这篇技术教程文章主要介绍了PHP基于swoole多进程操作示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3012字,纯文字阅读大概需要5分钟

内容图文

本文实例讲述了PHP基于swoole多进程操作。分享给大家供大家参考,具体如下:

多个任务同时执行

将顺序执行的任务,转化为并行执行(任务在逻辑上可以并行执行)
比如,我们要对已知的用户数据进行判断,是否需要发送邮件和短信,如果需要发送则发送。

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

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

<?php/** * Created by PhpStorm. * User: zhezhao * Date: 2016/10/20 * Time: 10:37 */$info = array(  "sendmail"=>1,  "mailto"=>"12345@qq.com",  "sendsms"=>1,  "smsto"=>"123456");echo "start:".date("Y-m-d H:i:s").PHP_EOL;$mail_process = new swoole_process('sendMail',true);$mail_process->start();$sms_process = new swoole_process('sendSMS',true);$sms_process->start();//主进程
输出子进程范围内容echo $mail_process->read();echo PHP_EOL;echo $sms_process->read();echo PHP_EOL;echo "end:".date("Y-m-d H:i:s").PHP_EOL;//并行函数function sendMail(swoole_process $worker){ global $info; if($info['sendmail']==1){ sleep(2); $worker->write("send mail to ".$info['mailto']); }}function sendSMS(swoole_process $worker){ global $info; if($info['sendmail']==1){ sleep(2); $worker->write("send sms to ".$info['smsto']); }}

大任务划分成多个小任务

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

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

<?php/** * Created by PhpStorm. * User: zhezhao * Date: 2016/10/20 * Time: 10:51 */$url_arr = array();for ($i=0;$i<10;$i++){  $url_arr[] = "www.baidu.com?wd=".$i;}echo "start:".date("Y-m-d H:i:s").PHP_EOL;$workers = array();for ($i=0;$i<5;$i++){  $process = new swoole_process('getContents',true);  $process->start();  $process->write($i);  $workers[] = $process;}//主进程数据结果foreach ($workers as $process){  echo $process->read();  echo PHP_EOL;}echo "end:".date("Y-m-d H:i:s").PHP_EOL;function getContents(swoole_process $worker){  $i = $worker->read();  global $url_arr;  $res1 = execCurl($url_arr[($i*2)]);  $res2 = execCurl($url_arr[($i*2+1)]);  echo $res1.PHP_EOL.$res2;}function execCurl($url){  sleep(2);  return "handle ".$url." finished";}

总结

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

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

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

关于两者的比较:http://wiki.swoole.com/wiki/page/214.html

参考文章:
https://segmentfault.com/a/1190000002946586

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

内容总结

以上是为您收集整理的PHP基于swoole多进程操作示例全部内容,希望文章能够帮你解决PHP基于swoole多进程操作示例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部