摘要:它包含了你創(chuàng)建多線程應(yīng)用的全部工具,當(dāng)然無論是還是控制臺(tái)程序。任何想要應(yīng)用在程序里面的多線程應(yīng)用必須都是繼承于這幾個(gè)實(shí)用類以上版本取消了類。
不分享,做一切!
php擁有令人敬畏的且數(shù)量龐大的擴(kuò)展跟特征,但是php當(dāng)初設(shè)計(jì)這門語言的時(shí)候,是因?yàn)槟莻€(gè)時(shí)候的web網(wǎng)站遠(yuǎn)遠(yuǎn)沒有今天的強(qiáng)大!現(xiàn)在幾乎所有的網(wǎng)站(含手機(jī)站)服務(wù)器都是多核的,如果不是多CPU跟多核,PHP是無法提供更好的服務(wù)的。雖然PHP正在非常迅速的展示及表達(dá)你的想法,但是當(dāng)我們想要通過成熟的語言或者框架,建設(shè)更加完善的網(wǎng)頁應(yīng)用(網(wǎng)站)或者是數(shù)據(jù)庫驅(qū)動(dòng)的應(yīng)用,因?yàn)镻HP不能夠讓我們更好的支配硬件服務(wù)器。所以比較尷尬!但是多線程讓PHP創(chuàng)建更完善【牛叉】的應(yīng)用成為可能,這個(gè)特征是的你的個(gè)人網(wǎng)站能夠做到一些以前不能夠做到的事情!
基礎(chǔ)
pthreads 擴(kuò)展是一個(gè)專有的API,它可以讓用戶在PHP語言里面使用多線程。它包含了你創(chuàng)建多線程應(yīng)用的全部工具,當(dāng)然無論是web、還是控制臺(tái)程序。
PHP程序可以創(chuàng)建、讀取、寫入及同步線程操作,含如下類型:Threads、Workers、Stackables【翻譯者注釋:V2 以上的版本 同 Threaded】。
Thread對(duì)象
用戶可以通過繼承Thread類來使用線程,當(dāng)然這個(gè)類是通過pthreads拓展實(shí)現(xiàn)的。任何成員【函數(shù)/代碼段/繼承者】都可以通過引入線程類來讀取及重寫這個(gè)線程類的方法。任何繼承于線程的程序,都可以執(zhí)行任何的公開的及受保護(hù)的線程程序。當(dāng)我們在程序中調(diào)用線程類里面的start方法的時(shí)候,線程類【繼承線程類的子類】中的run方法將會(huì)作為一個(gè)獨(dú)立的線程被執(zhí)行。只有當(dāng)上下文程序創(chuàng)建一個(gè)線程,并且開啟start方法及join方法的時(shí)候?!痉g者注釋:如果使用join 就是等待上一個(gè)線程結(jié)束,然后執(zhí)行下一個(gè)線程,官方給的說明是同步】
Worker對(duì)象
Worker線程擁有持久的穩(wěn)定性,表現(xiàn)在當(dāng)這個(gè)線程創(chuàng)建及開啟后是一直可用的,除非這個(gè)線程的引用超出了范圍,也就是線程實(shí)例消失了?;蛘咧鲃?dòng)調(diào)用shutdown方法關(guān)閉了。任何在程序中使用Worker類及子類實(shí)例化的對(duì)象,當(dāng)程序獨(dú)立運(yùn)行為一個(gè)獨(dú)立線程時(shí),這個(gè)Worker里面的run方法相對(duì)與存在Worker對(duì)象棧里面的其它程序,run方法將最先被調(diào)用。這樣的話,這個(gè)run方法就可以用來初始化一些資源,方便后面棧中程序調(diào)用?!痉g者注釋:注意在Workder對(duì)象里面stack方法內(nèi)調(diào)用的其它線程的實(shí)例化會(huì)被執(zhí)行,但是不是多帶帶產(chǎn)生新的線程。只有Worker此時(shí)會(huì)多帶帶產(chǎn)生線程,因?yàn)椴]有調(diào)用其它線程的start方法】【腳本執(zhí)行完成,這個(gè)Worker也會(huì)掛掉的?!?/p>
Stackable對(duì)象
棧排序【Stackable】對(duì)象在運(yùn)行run方法期間可以讀寫及執(zhí)行Worker線程,此外,任何繼承于Stackable線程的子程序或者程序段,都可以讀寫或者執(zhí)行它的自己的方法在線程執(zhí)行前或者執(zhí)行后?!痉g者注釋:應(yīng)該跟 Worker線程里面的 Stack相關(guān)吧。因?yàn)樵谧钚碌睦锩鎝threads v3版本里面的沒有Stackable類了,相關(guān)可以替換的應(yīng)該是 threaded 類,感覺 threaded是最大的基類,然后 thread是子類,然后worker是 thread的子類】
同步
所有的pthreads對(duì)象可以通過::wait()及::notify()方法來構(gòu)建線程同步,在子程序【程序段】中調(diào)用::wait()方法將會(huì)讓線程等待執(zhí)行,當(dāng)調(diào)用::notify()方法將會(huì)喚起::wait()方法繼續(xù)執(zhí)行線程。這樣就可以允許強(qiáng)大的線程PHP線程同步。
等等,什么是Threaded對(duì)象?
其中 Stackable、Thread、Worker可以被認(rèn)為是Threaded的子類,Threaded可以認(rèn)為是標(biāo)準(zhǔn)基礎(chǔ)類。所以上述的類都具備基類的全部屬性及方法。
任何想要應(yīng)用在程序里面的多線程應(yīng)用必須都是繼承于Stackable、Thread、Worker這幾個(gè)實(shí)用類【v3 以上版本 取消了 Stackable類】。這也就意味這每個(gè)子類都會(huì)天然具備run方法,但是不一定使用它【翻譯者注釋:因?yàn)閞un方法是在threaded這個(gè)最大的基類里面的,當(dāng)然每個(gè)子類都有了】。這個(gè)threaded類經(jīng)常會(huì)被實(shí)例化來進(jìn)行真正的程序運(yùn)算。也就是說,任何線程子程序都可以運(yùn)行threaded的成員屬性及函數(shù),在運(yùn)行前、中、后時(shí)期。
方法修飾符
在pthreads線程擴(kuò)展中的Threaded類中的受保護(hù)[protected]的方法,意味著同一時(shí)間內(nèi)之內(nèi)有一個(gè)線程調(diào)用這個(gè)方法。threaded類中私有[prvate]方法,意味著只能在線程運(yùn)行中進(jìn)行調(diào)用【也就是:創(chuàng)建該線程的對(duì)象調(diào)用】?!痉g者注釋:默認(rèn)的threaded類里面的方法都是public的,用戶需要自己添加受保護(hù)和私有的方法】
數(shù)據(jù)存儲(chǔ)
作為首要原則,任何可以被序列化的數(shù)據(jù)都可以作為類成員屬性進(jìn)行存儲(chǔ)【翻譯者注釋:類似于定義了魔術(shù)方法,對(duì)不存在的屬性進(jìn)行存取】,它能夠在子類實(shí)例化的任何位置進(jìn)行讀寫操作。不是所有的數(shù)據(jù)都會(huì)被序列化的,基礎(chǔ)的類型將會(huì)存儲(chǔ)相應(yīng)的真實(shí)表單中。復(fù)雜的類型,如數(shù)組 和對(duì)象【非線程對(duì)象】才會(huì)被序列化后存儲(chǔ)。存儲(chǔ)完成后,就可以在任何使用該線程的位置進(jìn)行讀取操作。
甚至如下特殊情況,就是線程對(duì)象作為另一個(gè)線程的成員屬性時(shí)候被引用的時(shí)候,同樣的數(shù)據(jù)讀取特性是一樣的。
資源
這些擴(kuò)展跟函數(shù)在PHP定義【請(qǐng)求】了一定的被占用的資源,pthreads會(huì)提供線程之間的資源共享【連接使用】,但是這些資源將會(huì)產(chǎn)生問題,絕大多數(shù)時(shí)間,資源是不應(yīng)該在不同的線程中間共享的,更應(yīng)該像是流或者sockets的方式管理資源。一般情況下,資源持久占用是不被支持的。
進(jìn)擊的的擴(kuò)展:
pthreads擴(kuò)展試圖獲取一個(gè)完整的結(jié)果。它的局限性及特征將會(huì)隨時(shí)改變。這個(gè)是非常自然的。它的這些局限性通常都是通過繼承強(qiáng)加的,雖然都是處于善意。pthreads 的目標(biāo)就是提供可用的、多任務(wù)的、任何級(jí)別的、PHP解決方案,在這樣的環(huán)境下pthreads誕生了,一些限制非常的必要,就是為了給大家提供一個(gè)穩(wěn)定的環(huán)境!請(qǐng)大家諒解!【翻譯者注釋:最后那句我加的!】
牛叉!
多線程官網(wǎng):
http://pthreads.org/
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處?;ヂ?lián)網(wǎng)+時(shí)代,時(shí)刻要保持學(xué)習(xí),攜手千鋒PHP,Dream It Possible。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22795.html
摘要:簡介是一組允許用戶在中使用多線程技術(shù)的面向?qū)ο蟮?。它提供了?chuàng)建多線程應(yīng)用所需的全套工具,無論是應(yīng)用還是控制臺(tái)應(yīng)用。通過使用,以及對(duì)象,應(yīng)用可以創(chuàng)建讀取寫入以及執(zhí)行多線程應(yīng)用,并可以在多個(gè)線程之間進(jìn)行同步控制。 簡介 pthreads 是一組允許用戶在 PHP 中使用多線程技術(shù)的面向?qū)ο蟮?API。 它提供了創(chuàng)建多線程應(yīng)用所需的全套工具,無論是 Web 應(yīng)用還是控制臺(tái)應(yīng)用。 通過使用 T...
摘要:餓了,沒有力氣寫代碼了。該對(duì)象有如下方法。五一再研究研究。。預(yù)定義常量線程的默認(rèn)選項(xiàng)。線程開始的時(shí)候,擴(kuò)展會(huì)將環(huán)境復(fù)制到線程上下文中。新線程開始時(shí),僅繼承配置。允許新線程向標(biāo)準(zhǔn)輸出發(fā)送頭信息通常情況下是被禁止的。 餓了,沒有力氣寫代碼了。馬上五一來臨。學(xué)一下多線程。pthread擴(kuò)展的安裝,就不說了。
摘要:如果現(xiàn)有子進(jìn)程中的線程總數(shù)不能滿足負(fù)載,控制進(jìn)程將派生新的子進(jìn)程。為解決線程的并發(fā)問題,引入了線程安全資源管理器。的全拼,用來存放各個(gè)線程的鏈表。 PHP 進(jìn)階之路 - 零基礎(chǔ)構(gòu)建自己的服務(wù)治理框架(上) PHP 進(jìn)階之路 - 零基礎(chǔ)構(gòu)建自己的服務(wù)治理框架(下) PHP 進(jìn)階之路 - 億級(jí) pv 網(wǎng)站架構(gòu)的技術(shù)細(xì)節(jié)與套路 PHP 進(jìn)階之路 - 億級(jí) pv 網(wǎng)站架構(gòu)實(shí)戰(zhàn)之性能壓榨 注...
閱讀 968·2023-04-25 23:50
閱讀 2002·2021-11-19 09:40
閱讀 613·2019-08-30 13:50
閱讀 2742·2019-08-29 17:11
閱讀 1054·2019-08-29 16:37
閱讀 2998·2019-08-29 12:54
閱讀 2808·2019-08-28 18:17
閱讀 2652·2019-08-26 16:55