国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP多線程(pthreads)與自動加載BUG問題

2024-05-04 21:48:24
字體:
來源:轉載
供稿:網友

php多線程功能是php5.3才真正的支持了,下面我就嘗試了pthreads功能的一個測試同時也發測試時發現了一些bug了,具體bug原因還無法解決看其它朋友有經驗嗎.

近日用PHP處理約7k條網絡數據,現有網絡情況下,耗時通常一秒一條,跑完整個程序大約近兩個小時.

由于跑一次數據的時間太長,因此計劃通過多個線程實現并行處理,我們可以通過pthreads擴展來實現真正的多線程,而不是常見的fsockopen來“模擬”。pthreads的官網介紹在這里:http://pthreads.org/

需要注意的是,如果嘗試用數組在線程間交換數據,你會失望的,因為php的數組本身不是線程安全的,正確的做法是繼承Stackable類,一個簡單的demo如下所示:

  1. <?php 
  2. class storage extends Stackable { 
  3. public function run(){} 
  4.  
  5. class my extends Thread { 
  6. public function __construct($storage) { 
  7. $this->storage = $storage; 
  8.  
  9. public function run(){ 
  10. $i = 0;//m.survivalescaperooms.com 
  11. while(++$i < 10) { 
  12. $this->storage[]=rand(0,1000); 
  13.  
  14. $this->synchronized(function($thread){ 
  15. $thread->notify(); 
  16. }, $this); 
  17.  
  18. $storage = new storage(); 
  19. $my = new my($storage); 
  20. $my->start(); 
  21.  
  22. $my->synchronized(function($thread){ 
  23. $thread->wait(); 
  24. }, $my); 
  25.  
  26. var_dump($storage); 
  27. ?> 

上例如果$storage是array,那么dump出來的將是null,啟用多線程后,跑一次數據的時間可以壓縮到1000秒內,不到二十分鐘,已經在我的接受范圍內了.

最后發現一個自動加載BUG

線程的run方法可以繼承主線程的常量,函數定義,ini_set()和自動加載不能繼承,具體什么能繼承什么不能繼承沒找到相關文檔,只能自己摸索.

繼承過來的函數中只能進行一些基本操作,如果試圖new一個對象(比如PDO)然后返回這個對象就會導致進程意外終止,就目前來說基本不能用于生產環境.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宣汉县| 武安市| 县级市| 上饶县| 翁牛特旗| 乌鲁木齐市| 芷江| 抚顺市| 大城县| 即墨市| 巴中市| 黄石市| 宜城市| 泸州市| 武宣县| 西昌市| 隆子县| 布拖县| 泽州县| 曲松县| 衢州市| 麟游县| 文成县| 蒙自县| 河间市| 桐乡市| 泗阳县| 青铜峡市| 长丰县| 徐水县| 东乡族自治县| 洛宁县| 普兰店市| 河曲县| 龙里县| 奉节县| 临桂县| 南充市| 边坝县| 油尖旺区| 安阳市|