php pthreads 多線程擴充的使用:一個較為穩定例子。

來源:互聯網
上載者:User

標籤:

今天研究了worker stackable的配合方法,寫了兩種形式,雖然能工作,但是都會出現記憶體不聽增長的問題;

於是把第一個方法的代碼郵件給了作者,到現在他沒有回複我。

 

我最後放棄兩者配合的方式,直接使用worker,發現到現在執行了582000個工作,記憶體沒有增長,速度也基本穩定,代碼如下:

[php] view plain copy print ?
  1. <?php  
  2. ini_set(‘zend.enable_gc‘, true);  
  3.   
  4. class ExampleWorker extends Worker {  
  5.     public $stack_count = 0;  
  6.     public function __construct() {}  
  7.     public function run(){  
  8.         sleep(1);//waiting for data  
  9.         $count = 0;  
  10.         $data_flag = true;  
  11.         $stime = microtime(true);  
  12.         while(1){  
  13.             if($data = $this->shift()){  
  14.                 $data_flag = true;  
  15.                 $this->doSomeWork();  
  16.                 if((++$count)%1000==0){  
  17.                     printf("Work Mermory used %.3fMB RAM, time: %3f===> %d \n",    
  18.                     memory_get_peak_usage(true)/1048576, (microtime(true) - $stime), $count);  
  19.                     $stime = microtime(true);  
  20.                 }  
  21.             }else{  
  22.                 usleep(100000);  
  23.             }  
  24.         }         
  25.         exit;  
  26.     }  
  27.     private function doSomeWork(){  
  28.         $str = ‘sdalsadkfkasd;lfksa;ldfkas;lkf;lsadkf;as‘;  
  29.         $len = strlen($str);  
  30.           
  31.         $s = substr($str,rand(0,$len));  
  32.         $len = floor(strlen($s)/2);  
  33.           
  34.         for($i=0;$i<$len;$i++){  
  35.             $tmp = $s[$i];  
  36.             $idx = intval($len-$i-1);  
  37.   
  38.             $s[$i] = $s[$idx];  
  39.             $s[$idx] = $tmp;  
  40.         }  
  41.     }  
  42. }  
  43.   
  44. $worker= new ExampleWorker(sprintf("Worker [%d]", 0));  
  45. $worker->start();  
  46.   
  47. $stime = microtime(true);  
  48. $count = 3000000;//99999999;  
  49. $total = $count*5;  
  50.   
  51. $ct = 0;  
  52. while($count--){  
  53.     //for ($target = 0; $target < 5; $target++)  
  54.     $worker[]=‘data_‘.(++$ct);  
  55.     usleep(rand(200,1800));  
  56. }  
  57. //sleep(10);  
  58. $runtime = (microtime(true)-$stime);  
  59. printf("---------------------------------------------------------\n");  
  60. printf("Used time is %f \n", $runtime);  
  61. printf("Mermory used %.3fMB RAM, added %d, left %d\n", memory_get_peak_usage(true)/1048576, $total, count($worker));  
  62. printf("---------------------------------------------------------\n");  
  63.   
  64. //var_dump($works);  


 

虛擬上的運行速度:

[plain] view plain copy print ?
  1. Work Mermory used 0.250MB RAM, time: 2.141709===> 607000   
  2. Work Mermory used 0.250MB RAM, time: 1.721918===> 608000   
  3. Work Mermory used 0.250MB RAM, time: 1.858363===> 609000   
  4. Work Mermory used 0.250MB RAM, time: 1.734542===> 610000   
  5. Work Mermory used 0.250MB RAM, time: 1.819794===> 611000   
  6. Work Mermory used 0.250MB RAM, time: 1.847132===> 612000   
  7. Work Mermory used 0.250MB RAM, time: 1.740353===> 613000   
  8. Work Mermory used 0.250MB RAM, time: 1.628364===> 614000   
  9. Work Mermory used 0.250MB RAM, time: 1.731518===> 615000   
  10. Work Mermory used 0.250MB RAM, time: 1.730583===> 616000   
  11. Work Mermory used 0.250MB RAM, time: 1.825315===> 617000   
  12. Work Mermory used 0.250MB RAM, time: 1.762334===> 618000   
  13. Work Mermory used 0.250MB RAM, time: 1.842860===> 619000   
  14. Work Mermory used 0.250MB RAM, time: 1.732677===> 620000  

php pthreads 多線程擴充的使用:一個較為穩定例子。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.