php pthreads 多线程扩展的使用:一个较为稳定例子。
今天研究了worker stackable的配合方法,写了两种形式,虽然能工作,但是都会出现内存不听增长的问题;
于是把第一个方法的代码邮件给了作者,到现在他没有回复我。
我最后放弃两者配合的方式,直接使用worker,发现到现在执行了582000个工作,内存没有增长,速度也基本稳定,代码如下:
<?php
ini_set('zend.enable_gc', true); class ExampleWorker extends Worker {
public $stack_count = 0;
public function __construct() {}
public function run(){
sleep(1);//waiting for data
$count = 0;
$data_flag = true;
$stime = microtime(true);
while(1){
if($data = $this->shift()){
$data_flag = true;
$this->doSomeWork();
if((++$count)%1000==0){
printf("Work Mermory used %.3fMB RAM, time: %3f===> %d \n",
memory_get_peak_usage(true)/1048576, (microtime(true) - $stime), $count);
$stime = microtime(true);
}
}else{
usleep(100000);
}
}
exit;
}
private function doSomeWork(){
$str = 'sdalsadkfkasd;lfksa;ldfkas;lkf;lsadkf;as';
$len = strlen($str); $s = substr($str,rand(0,$len));
$len = floor(strlen($s)/2); for($i=0;$i<$len;$i++){
$tmp = $s[$i];
$idx = intval($len-$i-1); $s[$i] = $s[$idx];
$s[$idx] = $tmp;
}
}
} $worker= new ExampleWorker(sprintf("Worker [%d]", 0));
$worker->start(); $stime = microtime(true);
$count = 3000000;//99999999;
$total = $count*5; $ct = 0;
while($count--){
//for ($target = 0; $target < 5; $target++)
$worker[]='data_'.(++$ct);
usleep(rand(200,1800));
}
//sleep(10);
$runtime = (microtime(true)-$stime);
printf("---------------------------------------------------------\n");
printf("Used time is %f \n", $runtime);
printf("Mermory used %.3fMB RAM, added %d, left %d\n", memory_get_peak_usage(true)/1048576, $total, count($worker));
printf("---------------------------------------------------------\n"); //var_dump($works);
虚拟上的运行速度:
Work Mermory used 0.250MB RAM, time: 2.141709===> 607000
Work Mermory used 0.250MB RAM, time: 1.721918===> 608000
Work Mermory used 0.250MB RAM, time: 1.858363===> 609000
Work Mermory used 0.250MB RAM, time: 1.734542===> 610000
Work Mermory used 0.250MB RAM, time: 1.819794===> 611000
Work Mermory used 0.250MB RAM, time: 1.847132===> 612000
Work Mermory used 0.250MB RAM, time: 1.740353===> 613000
Work Mermory used 0.250MB RAM, time: 1.628364===> 614000
Work Mermory used 0.250MB RAM, time: 1.731518===> 615000
Work Mermory used 0.250MB RAM, time: 1.730583===> 616000
Work Mermory used 0.250MB RAM, time: 1.825315===> 617000
Work Mermory used 0.250MB RAM, time: 1.762334===> 618000
Work Mermory used 0.250MB RAM, time: 1.842860===> 619000
Work Mermory used 0.250MB RAM, time: 1.732677===> 620000
php pthreads 多线程扩展的使用:一个较为稳定例子。的更多相关文章
- PHP安装pthreads多线程扩展教程[windows篇]
from:http://blog.csdn.net/aoyoo111/article/details/19020161 一.判断PHP是ts还是nts版 通过phpinfo(); 查看其中的 Thre ...
- windows下xampp安装PHP的pthreads多线程扩展
我的运行环境: 系统:windows10 ,64位 PHP:5.6.8 TS,VC11 ,32位 Apache: 2.0 我安装的是xampp集成环境 pthreads的windows扩展文件下载地址 ...
- Windows环境下PHP安装pthreads多线程扩展
一.判断PHP是ts还是nts版 通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版. ...
- Windows下PHP多线程扩展pthreads的安装
pthreads扩展安装步骤 1.查看phpinfo() 获取PHP版本号及位数(x86表示32位,x64表示64位).编译器版本.PHP配置文件加载所在位置等.如下图所示: 2.pthreads扩展 ...
- Unicode其实是Latin1的扩展。只有一个低字节的Uncode字符其实就是Latin1字符——附各种字符编码表及转换表
一.概念 1,ASCII ASCII(American Standard Code for Information Interchange),中文名称为美国信息交换标准代码.是 ...
- Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。
Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...
- .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”
FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...
- [转]自己写PHP扩展之创建一个类
原文:http://www.imsiren.com/archives/572 比如我们要创建一个类..PHP代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- linq to sql用partial扩展属性,创建一个部分类(用于多表连接)
1.在窗体中创建dataGridView显示表: using System; using System.Collections.Generic; using System.ComponentModel ...
随机推荐
- ubuntu_常用命令_01
1. 获取超级用户权限(需要输入超级用户的密码) sudo -i 2. 文本编辑器(暂时觉得 类似Windows里面的txt,更多功能有待发现) gedit /xxx/yyy ZC: 貌似 这个命令 ...
- linux学习笔记2-命令总结1
计划一个长期过程系统学习linux,这是本周学习总结,如果错误望指出纠正. 文件处理命令 命令格式与目录处理命令 ls 目录处理命令 cd cp mkdir mv pwd rm rmd ...
- 2014 Multi-University Training Contest 4
1006 hdu4902 #include <iostream> #include<stdio.h> #include<vector> #include<qu ...
- 使用Nexus搭建Maven私服
1. 环境搭建 1.1 下载 http://www.sonatype.org/nexus/ NEXUS OSS [OSS = Open Source Software,开源软件--免费] NE ...
- android平台的技术架构
Android平台采用了软件堆层(Software Stack)的架构,主要分为四个部分: 1.应用软件 Android 连同一个核心应用程序包一起发布,该应用程序包包括E-mail客户端.SMS短消 ...
- 如何在Mac OSX上安装xgboost
听说xgboost效果很不错,于是准备学习下,但是发现大多数资料都是在讲如何在windows或linux下安装xgboost,而且照着官方文档也没有正确的安装好多线程的xgboost.最后还是从the ...
- Phoenix - Hbase与SQL
Phoenix - Hbase与SQL 2016-10-23 杜亦舒 Phoenix是什么 简单来说,Phoenix 是一个可以让我们通过SQL的方式操作HBase数据库的框架. HBase是一个No ...
- iOS开发 字符串MD5加密
/*** MD5 ***/ #define CC_MD5_DIGEST_LENGTH 16 /* digest length in bytes */ #define CC_MD ...
- <转> jsp页面向action传值的方法(最后一种简单)
多的不说,直接上代码; struts.xml代码: <?xml version="1.0" encoding="UTF-8"?> <!DOCT ...
- 【bzoj1029】道路抢修
[bzoj1029]建筑抢修 传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1029 分析 http://blog.csdn.net/popo ...