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