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 ...
随机推荐
- 【转】C/C++ struct/class/union内存对齐
原文链接:http://www.cnblogs.com/Miranda-lym/p/5197805.html struct/class/union内存对齐原则有四个: 1).数据成员对齐规则:结构(s ...
- js自定义弹窗
<一>confirm弹窗 页面操作中常见需要确认操作. 例如:删除某条消息前需要确认是否删除. 页面中弹窗确认操作用到confirm消息对话框. JS代码 function del(){ ...
- Oracle 10g实现存储过程异步调用
DBMS_JOB是什么?DBMS_JOB是Oracle数据库提供的专家程序包的一个.主要用来在后台运行程序,是数据库中一个极好的工具. 可用于自动调整调度例程任务,例如分析数据表,执行一些归档操作,清 ...
- Python学习笔记9—文件
打开文件
- C语言语法之占用字节
指针占用字节 指针即为地址,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间),所以不同类型的指针长度都一样. 指针占用几个字节跟语言无关,而是跟系统的寻址能力有关,16为地 ...
- flexbox弹性伸缩布局
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- iOS开发之语音功能实现
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...
- 在Maven中设置Nexus私有服务为中央工厂(repository)
原文:http://blog.csdn.net/mexican_jacky/article/details/50275695 nexus中的仓库列表 第一种方式: <repositories&g ...
- [转载]WEB缓存技术概述
[原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...
- Redhat Linux 性能 - 内置的 sar
缺省 / 默认 Redhat Linux 会自动使用 sar 采集系统性能信息,并记录到 /var/log/sa 每 10分钟采集一次, 记录 CPU / Memory / Disk / Networ ...