標籤:php 多線程 pthreads
php從5.3開始支援多線程pthreads擴充,並同時支援window和linux。
pthreads可以實現多任務同步或非同步執行,它提供了建立多線程應用所需的全套工具,預設未安裝。
安裝
window系統下:http://windows.php.net/downloads/pecl/releases/pthreads/
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M02/8D/92/wKioL1iifiuSqZIpAAUcjb9pxvg744.jpg" title="QQ20170214114826.jpg" alt="wKioL1iifiuSqZIpAAUcjb9pxvg744.jpg" />
安裝前需要確認PHP版本及安裝位元,可使用phpinfo(); Architecture即是當前安裝位元。官方PHP在5.6及以前版本均為32位(相容64位),所以PHP5可直接下載32位pthreads擴充。
說明:3.0版本及以上為PHP7專用,3.0版本以下為PHP5專用。
這裡以PHP5.5(32位)為例安裝:
選擇2.0.9版本目錄
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M02/8D/94/wKiom1iif0mA7Pz6AATZcO-lTcc312.jpg" title="QQ20170214114826.jpg" alt="wKiom1iif0mA7Pz6AATZcO-lTcc312.jpg" />
下載 php_pthreads-2.0.9-5.5-ts-vc11-x86.zip 包並解壓
注意:包名規則中已經包含了pthreads的版本+php版本+底層編譯VC版本,所以下載時可以按這個規則去找。
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/8D/95/wKiom1iiiOfyX3KbAAPXJypeZdw408.jpg" title="QQ20170214114826.jpg" alt="wKiom1iiiOfyX3KbAAPXJypeZdw408.jpg" />
複製php_pthreads.dll到PHP擴充目錄中。複製pthreadVC2.dll到PHP安裝根目錄和apache安裝bin目錄下)
開啟php.ini設定檔,增加擴充 extension=php_pthreads.dll 儲存並退出,重啟伺服器
寫代碼測試。
<?phpclass thread_test extends Thread { public function run() { var_dump($this); }}$thread = new thread_test();$thread->start();
沒有報錯即安裝成功,如果有報錯提示沒有擴充可先phpinfo();查看下擴充是否安裝或查看設定檔是否修改錯。
linux系統下:http://pecl.php.net/package/pthreads
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/8D/95/wKiom1iijqqjJAkuAAmmz8pKTIU159.jpg" title="QQ20170214114826.jpg" alt="wKiom1iijqqjJAkuAAmmz8pKTIU159.jpg" />
進入PHP安裝bin目錄下執行命令:
sudo ./pecl install pthread-2.0.9
如果安裝失敗可嘗試安裝低版本,安裝成功後需要修改php.ini檔案,增加 extension=pthreads.so ,以開啟pthreads擴充。
測試與window類似。
應用
在官方文檔中已經有詳細的說明,具體的可以查看文檔中 PHP手冊 >> 函數參考 >> 進程式控制制擴充 >> pthreads
注意:PHP資源類型( PHP 中很多使用到 Resource 資源類型的擴充或函數並未針對多線程情境進行特殊設計)在多線程中共用會存在很多問題,大部分資源類型無法共用如資料庫連接,檔案資源等,只有socket,mysqli 等少量資源類型可以共用!
很多樣本可以在github上查看:https://www.github.com/krakjoe/pthreads examples目錄中。
本文出自 “秋風掃落葉” 部落格,請務必保留此出處http://php2012web.blog.51cto.com/5585213/1897614
PHP開啟多線程擴充