关于PHP的多线程扩展pcntl的一些测试
2016-05-15 21:43
561 查看
前几天朋友有一个需求,就是需要做一个二维码的东西,看他的需求挺大,需要做几万个。
但是PHP不是java没有多线程的概念,虽然用swoole可以实现,但是我感觉还是比较麻烦的,最后试验了一下pcntl作为多进程跑,看看需要多长时间。
linux安装pcntl扩展之后就开始写测试代码了。
如果用单进程跑的话,阿里云CPU双核跑10000个需要15min左右,
但是在多线程的话10条进程并发先跑10000个只需要1min左右。
效率提高了。。。。太多了。
但是PHP不是java没有多线程的概念,虽然用swoole可以实现,但是我感觉还是比较麻烦的,最后试验了一下pcntl作为多进程跑,看看需要多长时间。
linux安装pcntl扩展之后就开始写测试代码了。
<?php header("Content-Type:utf-8"); include "phpqrcode/phpqrcode.php"; $max = 80000;//八万个二维码 $workers = 10;//生成10个进程跑 echo '开始时间'.microtime(); $pids = array(); for($i = 0; $i < $workers; $i++){ $pids[$i] = pcntl_fork(); switch ($pids[$i]) { case -1: echo "fork error : {$i} \r\n"; exit; case 0: $param = array( 'lastid' => $max / $workers * $i, 'maxid' => $max / $workers * ($i+1), ); makeqrcode('http://www.baidu.com',$param); exit; default: break; } } foreach ($pids as $i => $pid) { if($pid) { pcntl_waitpid($pid, $status); } } echo '结束时间'.microtime(); function makeqrcode($url,$param) { for($i=$param['lastid'];$i<$param['maxid'];++$i){ //循环生成二维码 $filename = './test'.$i.rand(1,10000).'.png'; QRcode::png($url,$filename); } } ?>
如果用单进程跑的话,阿里云CPU双核跑10000个需要15min左右,
但是在多线程的话10条进程并发先跑10000个只需要1min左右。
效率提高了。。。。太多了。
相关文章推荐
- php 删除数据库表中的记录
- php怎么实现根据图片搜索图片功能
- php读取数据库信息的几种方法
- php以图搜图
- [分享]ThinkPHP3.2超详细视频教程
- Thinkphp,qeephp,cakephp,zendframework,symfony 对比
- windows下本地thinkphp环境搭建
- php热身2:CRUD with Ajax
- php trim() 函数实例讲解
- php正则表达式
- php显示数学公式
- PHP Warning: mkdir()...Permission denied
- FTP 上传 下载
- 基于MT7688模块的开发笔记13——给MT7688开发板添加tftp等功能
- Mac系统配置php环境
- php使用json_decode解析json返回NULL
- thinkphp框架验证码验证一次
- php history.back返回后表单数据丢失的解决办法
- php 数据类型与转换
- TP框架基础(三)