php pthreads 多线程扩展的使用:一个较为稳定例子。
2013-10-24 16:29
405 查看
今天研究了worker stackable的配合方法,写了两种形式,虽然能工作,但是都会出现内存不听增长的问题;
于是把第一个方法的代码邮件给了作者,到现在他没有回复我。
我最后放弃两者配合的方式,直接使用worker,发现到现在执行了582000个工作,内存没有增长,速度也基本稳定,代码如下:
虚拟上的运行速度:
于是把第一个方法的代码邮件给了作者,到现在他没有回复我。
我最后放弃两者配合的方式,直接使用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 多线程扩展的使用:一个较为稳定例子。
- PHP5.3以上版本使用pthreads PHP扩展真正支持多线程
- Redis的安装、使用以及php中扩展redis并实现php操作redis的一个例子
- Windows下PHP多线程扩展pthreads的安装
- wamp安装pthreads扩展(PHP多线程)
- PHP多线程扩展 pthreads 安装
- PHP扩展开发:一个简单的例子
- php中使用临时表查询数据的一个例子
- java多线程学习10-使用ReentrantReadWriteLock的一个例子
- 一个多线程使用方法例子
- windows下安装php真正的多线程扩展pthreads教程
- wamp安装pthreads扩展(PHP多线程)
- Windows下PHP多线程扩展pthreads的安装
- 推荐一个PHP扩展 来真正实现PHP多线程的开发
- php 多线程 pthreads扩展
- C++使用临界区(互斥体)来控制多线程访问同一个变量(经典例子)
- 使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
- php使用memcached扩展的一个BUG
- windows下安装php真正的多线程扩展pthreads教程