bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

php不支持多線程的解決方法

php不支持多線程的解決方法?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

創新互聯公司是專業的順城網站建設公司,順城接單;提供網站設計制作、做網站,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行順城網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!

PHP 默認并不支持多線程,要使用多線程需要安裝 pthread 擴展,而要安裝 pthread 擴展,必須使用 --enable-maintainer-zts 參數重新編譯 PHP,這個參數是指定編譯 PHP 時使用線程安全方式。

推薦:php服務器

線程安全

多線程是讓程序變得不安分的一個因素,在使用多線程之前,首先要考慮線程安全問題:

線程安全:線程安全是編程中的術語,指某個函數、函數庫在多線程環境中被調用時,能夠正確地處理多個線程之間的共享變量,使程序功能正確完成。

在傳統多線程中,由于多個線程共享變量,所以可能會導致出現如下問題:

  1. 存在一個全局數組$arr = array('a');;

  2. A線程獲取數組長度為1;

  3. B 線程獲取數組長度為1;

  4. A 線程 pop 出數組元素 $a = array_pop($arr); $a = 'a';;

  5. B 線程也 pop 數組元素 $b = array_pop($arr); $a = null;;

  6. 此時 B 線程內就出現了靈異事件,明明數組長度大于0,或沒有 pop 出東西;

PHP 實現

PHP 實現的線程安全主要是使用 TSRM 機制對 全局變量和靜態變量進行了隔離,將全局變量和靜態變量 給每個線程都復制了一份,各線程使用的都是主線程的一個備份,從而避免了變量沖突,也就不會出現線程安全問題。

PHP 對多線程的封裝保證了線程安全,程序員不用考慮對全局變量加各種鎖來避免讀寫沖突了,同時也減少了出錯的機會,寫出的代碼更加安全。

但由此導致的是,子線程一旦開始運行,主線程便無法再對子線程運行細節進行調整了,線程一定程度上失去了線程之間通過全局變量進行消息傳遞的能力。

同時 PHP 開啟線程安全選項后,使用 TSRM 機制分配和使用變量時也會有額外的損耗,所以在不需要多線程的 PHP 環境中,使用 PHP 的 ZTS (非線程安全) 版本就好。

類和方法

PHP 將線程 封裝成了 Thread 類,線程的創建通過實例化一個線程對象來實現,由于類的封裝性,變量的使用只能通過構造函數傳入,而線程運算結果也需要通過類變量傳出。

下面介紹幾個常用的 Thread 類方法:

  • run():此方法是一個抽象方法,每個線程都要實現此方法,線程開始運行后,此方法中的代碼會自動執行;

  • start():在主線程內調用此方法以開始運行一個線程;

  • join():各個線程相對于主線程都是異步執行,調用此方法會等待線程執行結束;

  • kill():強制線程結束;

  • isRunning():返回線程的運行狀態,線程正在執行run()方法的代碼時會返回 true;

因為線程安全的實現,PHP 的多線程開始運行后,無法再通過共享內存空間通信,線程也無法通過線程間通信復用,所以我認為 PHP 的“線程池”并沒有什么意義。擴展內自帶的Pool 類是一個對多線程分配管理的類,這里也不再多介紹了。

感謝各位的閱讀!看完上述內容,你們對php不支持多線程的解決方法大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注創新互聯行業資訊頻道。

分享標題:php不支持多線程的解決方法
新聞來源:http://vcdvsql.cn/article10/gjssgo.html

成都網站建設公司_創新互聯,為您提供用戶體驗、建站公司網站維護網站制作、品牌網站建設、外貿建站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化