php不支持多線程的解決方法?這個(gè)問(wèn)題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過(guò)這個(gè)問(wèn)題能讓你收獲頗深。下面是小編給大家?guī)?lái)的參考內(nèi)容,讓我們一起來(lái)看看吧!
黃山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),黃山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為黃山上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的黃山做網(wǎng)站的公司定做!PHP 默認(rèn)并不支持多線程,要使用多線程需要安裝 pthread 擴(kuò)展,而要安裝 pthread 擴(kuò)展,必須使用 --enable-maintainer-zts 參數(shù)重新編譯 PHP,這個(gè)參數(shù)是指定編譯 PHP 時(shí)使用線程安全方式。
推薦:php服務(wù)器
線程安全
多線程是讓程序變得不安分的一個(gè)因素,在使用多線程之前,首先要考慮線程安全問(wèn)題:
線程安全:線程安全是編程中的術(shù)語(yǔ),指某個(gè)函數(shù)、函數(shù)庫(kù)在多線程環(huán)境中被調(diào)用時(shí),能夠正確地處理多個(gè)線程之間的共享變量,使程序功能正確完成。
在傳統(tǒng)多線程中,由于多個(gè)線程共享變量,所以可能會(huì)導(dǎo)致出現(xiàn)如下問(wèn)題:
存在一個(gè)全局?jǐn)?shù)組$arr = array('a');;
A線程獲取數(shù)組長(zhǎng)度為1;
B 線程獲取數(shù)組長(zhǎng)度為1;
A 線程 pop 出數(shù)組元素 $a = array_pop($arr); $a = 'a';;
B 線程也 pop 數(shù)組元素 $b = array_pop($arr); $a = null;;
此時(shí) B 線程內(nèi)就出現(xiàn)了靈異事件,明明數(shù)組長(zhǎng)度大于0,或沒有 pop 出東西;
PHP 實(shí)現(xiàn)
PHP 實(shí)現(xiàn)的線程安全主要是使用 TSRM 機(jī)制對(duì) 全局變量和靜態(tài)變量進(jìn)行了隔離,將全局變量和靜態(tài)變量 給每個(gè)線程都復(fù)制了一份,各線程使用的都是主線程的一個(gè)備份,從而避免了變量沖突,也就不會(huì)出現(xiàn)線程安全問(wèn)題。
PHP 對(duì)多線程的封裝保證了線程安全,程序員不用考慮對(duì)全局變量加各種鎖來(lái)避免讀寫沖突了,同時(shí)也減少了出錯(cuò)的機(jī)會(huì),寫出的代碼更加安全。
但由此導(dǎo)致的是,子線程一旦開始運(yùn)行,主線程便無(wú)法再對(duì)子線程運(yùn)行細(xì)節(jié)進(jìn)行調(diào)整了,線程一定程度上失去了線程之間通過(guò)全局變量進(jìn)行消息傳遞的能力。
同時(shí) PHP 開啟線程安全選項(xiàng)后,使用 TSRM 機(jī)制分配和使用變量時(shí)也會(huì)有額外的損耗,所以在不需要多線程的 PHP 環(huán)境中,使用 PHP 的 ZTS (非線程安全) 版本就好。
類和方法
PHP 將線程 封裝成了 Thread 類,線程的創(chuàng)建通過(guò)實(shí)例化一個(gè)線程對(duì)象來(lái)實(shí)現(xiàn),由于類的封裝性,變量的使用只能通過(guò)構(gòu)造函數(shù)傳入,而線程運(yùn)算結(jié)果也需要通過(guò)類變量傳出。
下面介紹幾個(gè)常用的 Thread 類方法:
run():此方法是一個(gè)抽象方法,每個(gè)線程都要實(shí)現(xiàn)此方法,線程開始運(yùn)行后,此方法中的代碼會(huì)自動(dòng)執(zhí)行;
start():在主線程內(nèi)調(diào)用此方法以開始運(yùn)行一個(gè)線程;
join():各個(gè)線程相對(duì)于主線程都是異步執(zhí)行,調(diào)用此方法會(huì)等待線程執(zhí)行結(jié)束;
kill():強(qiáng)制線程結(jié)束;
isRunning():返回線程的運(yùn)行狀態(tài),線程正在執(zhí)行run()方法的代碼時(shí)會(huì)返回 true;
因?yàn)榫€程安全的實(shí)現(xiàn),PHP 的多線程開始運(yùn)行后,無(wú)法再通過(guò)共享內(nèi)存空間通信,線程也無(wú)法通過(guò)線程間通信復(fù)用,所以我認(rèn)為 PHP 的“線程池”并沒有什么意義。擴(kuò)展內(nèi)自帶的Pool 類是一個(gè)對(duì)多線程分配管理的類,這里也不再多介紹了。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)php不支持多線程的解決方法大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享題目:php不支持多線程的解決方法-創(chuàng)新互聯(lián)
文章路徑:http://jinyejixie.com/article6/dsieog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站維護(hù)、虛擬主機(jī)、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容