創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
站在用戶的角度思考問題,與客戶深入溝通,找到任丘網(wǎng)站設(shè)計(jì)與任丘網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋任丘地區(qū)。php8.0增加了哪些功能?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
什么是JIT?
PHP實(shí)現(xiàn)了一個虛擬機(jī),一種虛擬處理器,我們稱之為Zend VM。PHP將人類可讀的腳本編譯成虛擬機(jī)能夠理解的指令(我們稱之為操作碼),這個執(zhí)行階段就是我們所說的“編譯時”。在執(zhí)行的“運(yùn)行時”階段,虛擬機(jī)(Zend VM)執(zhí)行代碼的指令(操作碼)。
這一切工作得很好,像APC(過去)和OPCache(現(xiàn)在)這樣的工具可以緩存代碼的指令(操作碼),以便“編譯時”只在必須的時候發(fā)生。
首先,有一行代碼解釋了什么是JIT:
Just-in-time
是一種編譯器策略,它接受代碼的中間表示形式,并在運(yùn)行時將其轉(zhuǎn)換為依賴于體系結(jié)構(gòu)的機(jī)器代碼,以便及時執(zhí)行。
在PHP中,這意味著JIT將為Zend VM生成的指令作為中間表示,并發(fā)出依賴于體系結(jié)構(gòu)的機(jī)器代碼,因此代碼的宿主不再是ZendVM,而是CPU。
為什么PHP需要JIT?
在PHP 7.0之前,PHP內(nèi)部社區(qū)關(guān)注的焦點(diǎn)是性能,這是由Facebook的HHVM項(xiàng)目帶來的良性競爭帶來的。PHP 7.0中的大部分核心更改都包含在PHPNG補(bǔ)丁中,這大大改進(jìn)了PHP在其核心上利用內(nèi)存和CPU的方式,從那時起,我們每個人都被迫關(guān)注性能。
自PHP 7.0以來,已經(jīng)有了一些性能改進(jìn),HashTable
(PHP的核心數(shù)據(jù)結(jié)構(gòu))的優(yōu)化,某些操作碼的Zend VM的專門化,某些序列的編譯器的專門化,以及對OPCache的優(yōu)化器組件的不斷改進(jìn)。。。除此之外還有很多其他的,太無聊了。
這是一個殘酷的事實(shí),這些優(yōu)化只能帶我們到目前為止,我們正在迅速接近,或可能已經(jīng)遇到了磚墻,在我們的能力,以進(jìn)一步改善它。
注意:當(dāng)我們說“我們不能再改進(jìn)了”時,我們真正的意思是,“我們必須做出取舍,以進(jìn)一步改進(jìn)它不再看起來有吸引力”。。。每當(dāng)我們討論性能優(yōu)化時,我們都在討論權(quán)衡。通常,在簡單性和性能之間進(jìn)行權(quán)衡。我們都想認(rèn)為最簡單的代碼是最快的代碼,但在現(xiàn)代的C編程世界中,情況并非如此。最快的代碼通常是準(zhǔn)備利用依賴于體系結(jié)構(gòu)的內(nèi)部函數(shù)或依賴于平臺(編譯器)的內(nèi)部函數(shù)的代碼。簡單并不能保證最好的性能。
此時,PHP的JIT功能似乎是從PHP獲得更多性能的最佳方法。
JIT會讓我的網(wǎng)站更快嗎?
很有可能,并不明顯。
也許不是您期望的答案:在一般情況下,用PHP編寫的應(yīng)用程序是I/O綁定
的,JIT
在CPU綁定
的代碼上工作得最好。
“I/O和CPU綁定”到底是什么意思?
當(dāng)我們想要描述一段代碼或一個應(yīng)用程序的一般性能特征時,我們使用術(shù)語I/O綁定
和CPU綁定
。
最簡單的說法是:
如果我們能夠改進(jìn)(減少、優(yōu)化)它所做的I/O,那么一段I/O綁定的代碼將會運(yùn)行得更快。
如果我們能夠改進(jìn)(減少、優(yōu)化)CPU正在執(zhí)行的指令,或者(神奇地)提高CPU的時鐘速度,那么一段CPU限制的代碼就會運(yùn)行得更快:)
一段代碼或一個應(yīng)用程序可以是I/O綁定、CPU綁定,或者與CPU和I/O同等綁定。
一般來說,PHP應(yīng)用程序往往是I/O綁定的——減慢它們速度的是它們正在執(zhí)行的I/O——連接、讀取和寫入數(shù)據(jù)庫、緩存、文件、套接字等等。
CPU綁定的PHP是什么樣子的?
由于大多數(shù)PHP應(yīng)用程序的性質(zhì),許多PHP程序員并不熟悉CPU綁定代碼——他們的工作往往是連接到某個數(shù)據(jù)庫,或者可能是一個緩存,做一些輕量級的工作,并輸出html/json/xml
響應(yīng)。
您可能會環(huán)顧代碼庫,發(fā)現(xiàn)許多與I/O無關(guān)的代碼,甚至調(diào)用與I/O完全斷開連接的函數(shù)的代碼,并且會感到困惑,我似乎是在暗示這并沒有使您的應(yīng)用程序CPU受到限制,即使處理非I/O的代碼行數(shù)可能比I/O多。
PHP實(shí)際上相當(dāng)快,它是世界上解釋速度最快的語言之一。Zend VM調(diào)用與I/O無關(guān)的函數(shù)和在機(jī)器代碼中進(jìn)行相同的調(diào)用之間沒有顯著的區(qū)別。
這顯然是有區(qū)別的,但事實(shí)是,機(jī)器代碼有一個調(diào)用約定,Zend VM有一個調(diào)用約定,機(jī)器代碼有一個序言,Zend VM有一個序言:在Zend操作碼中調(diào)用某個c_level_function()
還是機(jī)器代碼對調(diào)用應(yīng)用程序的性能沒有顯著影響-盡管這似乎對那個電話有很大的影響。
注意:調(diào)用約定大致是指在進(jìn)入另一個函數(shù)之前執(zhí)行的一系列指令,序言是指在進(jìn)入另一個函數(shù)時執(zhí)行的一系列指令:在這兩種情況下,調(diào)用約定都將參數(shù)推送到堆棧上,序言將它們從堆棧中彈出。
循環(huán)、尾調(diào)用和X呢?我聽說你問過:PHP實(shí)際上非常聰明,啟用了OPCache的優(yōu)化器組件,你的代碼就好像被魔法轉(zhuǎn)化成了你能編寫的最有效的形式。
現(xiàn)在需要注意的是,JIT不會改變Zend函數(shù)的調(diào)用約定,而不是VM建立的約定-Zend必須能夠在任何時候在JIT和VM模式之間切換,因此決定保留VM建立的調(diào)用約定。因此,當(dāng)JIT運(yùn)行時,隨處可見的那些調(diào)用并沒有明顯地加快速度。
如果您想了解CPU綁定的PHP代碼是什么樣子的,請查看Zend/bench.php
文件... 這顯然是一個極限的CPU代碼示例,但它應(yīng)該讓我們知道JIT真正的亮點(diǎn)是在數(shù)學(xué)領(lǐng)域。
PHP是否為加快數(shù)學(xué)速度做出了最終的權(quán)衡?
不,我們這樣做是為了擴(kuò)大PHP的范圍,而且相當(dāng)大。
在這個非常偏頗的PHP開發(fā)人員看來,如果你在2019年是一名web程序員,你還沒有考慮在下一個項(xiàng)目中使用PHP,那么你做的web是錯誤的。
在PHP中提高更快地執(zhí)行數(shù)學(xué)的能力,乍一看,似乎是一個非常狹窄的范圍。
然而,這實(shí)際上為機(jī)器學(xué)習(xí)、3d渲染、2d(gui)渲染和數(shù)據(jù)分析(僅舉幾個例子)打開了大門。
為什么我們不能在PHP 7.4中使用它呢?
我剛剛把JIT稱為“最終的權(quán)衡”,我認(rèn)為它是:它可以說是有史以來最復(fù)雜的編譯器策略之一,也許是最復(fù)雜的。引入JIT就是引入相當(dāng)?shù)膹?fù)雜性。
如果你問Dmitry(JIT的作者)他是否讓PHP變得復(fù)雜,他會說“不,我討厭復(fù)雜性”(這是一個直接的引語)。
歸根結(jié)底,復(fù)雜是我們所不了解的,而目前,真正了解JIT實(shí)現(xiàn)的內(nèi)部開發(fā)人員(不到幾個)很少。
PHP 7.4的發(fā)展很快,合并到php7.4中會給我們留下一個PHP版本,只有不到幾個人可以調(diào)試、修復(fù)或改進(jìn)(在任何實(shí)際意義上)。對于那些對合并到PHP 7.4投反對票的人來說,這種情況是不可接受的。
在從現(xiàn)在到PHP 8的這段時間里,我們中的許多人將在業(yè)余時間努力理解JIT:
我們?nèi)匀挥幸恍┮獙?shí)現(xiàn)的特性和需要為php8重寫的工具,首先我們必須理解JIT。我們需要這一次,并非常感謝大多數(shù)選民認(rèn)為適合把它交給我們。
復(fù)雜并不是可怕的同義詞:
復(fù)雜可以是美麗的,就像星云一樣,JIT就是那種復(fù)雜。原則上,你可以完全理解某件復(fù)雜的事情,并且只在表面上的復(fù)雜程度上稍微降低一點(diǎn)。換句話說,即使有20個內(nèi)部開發(fā)人員和Dmitry一樣熟悉JIT,它也不會真正改變JIT的復(fù)雜性。
PHP的開發(fā)速度會減慢嗎?
沒有理由認(rèn)為會這樣。我們有足夠的時間可以滿懷信心地說,到PHP 8
普遍可用時,我們中已經(jīng)有足夠多的人熟悉JIT
,至少在修復(fù)bug和推動PHP向前發(fā)展方面能夠像今天一樣發(fā)揮作用。
當(dāng)試圖將這一點(diǎn)與JIT
本質(zhì)上是復(fù)雜的觀點(diǎn)聯(lián)系起來時,請考慮我們花在引入新特性上的大部分時間實(shí)際上是花在討論該特性上的。對于大多數(shù)功能,甚至修復(fù),代碼可能需要幾分鐘或幾小時的編寫時間,而討論則需要幾周或幾個月的時間。在極少數(shù)情況下,一個特性的代碼可能需要幾個小時或幾天的時間來編寫,但在這些極少數(shù)情況下,討論總是需要更長的時間。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。
新聞名稱:php8.0增加了哪些功能-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://jinyejixie.com/article14/ghdge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、標(biāo)簽優(yōu)化、企業(yè)建站、響應(yīng)式網(wǎng)站、營銷型網(wǎng)站建設(shè)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容