您好,登錄后才能下訂單哦!
這篇“PHP特性、內(nèi)核及架構(gòu)是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“PHP特性、內(nèi)核及架構(gòu)是什么”文章吧。
1、jit即時(shí)編譯器。jit在opcache優(yōu)化之后的基礎(chǔ)上,結(jié)合runtime的信息再次優(yōu)化,直接生成機(jī)器碼。jit不是opcache優(yōu)化的代替,是增強(qiáng)。
2、match表達(dá)式,用于變量的值轉(zhuǎn)換與賦值。
3、聯(lián)合類(lèi)型。
支持聲明并接受多個(gè)不同類(lèi)型的,它是兩種或多鐘類(lèi)型的集合。
4、static返回類(lèi)型。PHP 8 中支持 static 返回類(lèi)型將更加高效。
5、弱映射WeakMap。允許數(shù)組中的key放入對(duì)象。
6、類(lèi)的變更、使用
1、可變參數(shù)繼承(雞肋),允許
2、后期靜態(tài)綁定(LSB)(有用),對(duì)框架級(jí)別的封裝、一些工廠設(shè)計(jì)模式有用。
3、現(xiàn)在可以使用以下方法獲取對(duì)象的類(lèi)名稱(chēng)
4、現(xiàn)在,new 和 instanceof 可以與任意表達(dá)式一起使用,使用new(expression)(... $args) 和 $obj instanceof(expression)。
5、現(xiàn)在允許寫(xiě)。
6、添加 Stringable 接口(作用一般,用在視圖模板封裝)。
7、trait 現(xiàn)在可以定義抽象的私有方法。
1、標(biāo)量類(lèi)型聲明和返回值類(lèi)型聲明。
2、null合并運(yùn)算符(??)
3、命名空間引用 use 加強(qiáng):從同一 namespace 導(dǎo)入的類(lèi)、函數(shù)和常量現(xiàn)在可以通過(guò)單個(gè) use 語(yǔ)句 一次性導(dǎo)入了
4、匿名類(lèi):現(xiàn)在支持通過(guò)new class 來(lái)實(shí)例化一個(gè)匿名類(lèi)
5、性能比php5提升2倍。
6、支持64位。
1、變量存儲(chǔ)字節(jié)減小。減少內(nèi)存占用,提升變量操作速度
2、改善數(shù)組結(jié)構(gòu)。數(shù)組元素和hash映射表被分配在同一塊內(nèi)存里,降低了內(nèi)存占用、提升了 cpu 緩存命中率
3、改進(jìn)了函數(shù)的調(diào)用機(jī)制。通過(guò)優(yōu)化參數(shù)傳遞的環(huán)節(jié),減少了一些指令,提高執(zhí)行效率
詞法分析,把源代碼切割成多個(gè)字符串單元(Token)
語(yǔ)法分析器把Token轉(zhuǎn)換成AST抽象語(yǔ)法樹(shù)
抽象語(yǔ)法樹(shù)轉(zhuǎn)換成opcodes(opcode指令集合)
虛擬機(jī)解釋執(zhí)行執(zhí)行opcodes(opcode是一組指令標(biāo)識(shí),對(duì)應(yīng)handler處理函數(shù))
SAPI運(yùn)行PHP都經(jīng)過(guò)下面幾個(gè)階段:
1、模塊初始化階段(module init):
這個(gè)階段主要進(jìn)行php框架、zend引擎的初始化操作。這個(gè)階段一般是在SAPI啟動(dòng)時(shí)執(zhí)行一次,對(duì)于FPM而言,就是在fpm的master進(jìn)行啟動(dòng)時(shí)執(zhí)行的。php加載每個(gè)擴(kuò)展的代碼并調(diào)用其模塊初始化例程(MINIT),進(jìn)行一些模塊所需變量的申請(qǐng),內(nèi)存分配等。
2、請(qǐng)求初始化階段(request init):
當(dāng)一個(gè)頁(yè)面請(qǐng)求發(fā)生時(shí),在請(qǐng)求處理前都會(huì)經(jīng)歷的一個(gè)階段。對(duì)于fpm而言,是在worker進(jìn)程accept一個(gè)請(qǐng)求并讀取、解析完請(qǐng)求數(shù)據(jù)后的一個(gè)階段。在這個(gè)階段內(nèi),SAPI層將控制權(quán)交給PHP層,PHP初始化本次請(qǐng)求執(zhí)行腳本所需的環(huán)境變量。
3、php腳本執(zhí)行階段:
php代碼解析執(zhí)行的過(guò)程。Zend引擎接管控制權(quán),將php腳本代碼編譯成opcodes并順次執(zhí)行
4、請(qǐng)求結(jié)束階段(request shutdown):
請(qǐng)求處理完后就進(jìn)入了結(jié)束階段,PHP就會(huì)啟動(dòng)清理程序。這個(gè)階段,將flush輸出內(nèi)容、發(fā)送http響應(yīng)內(nèi)容等,然后它會(huì)按順序調(diào)用各個(gè)模塊的RSHUTDOWN方法。 RSHUTDOWN用以清除程序運(yùn)行時(shí)產(chǎn)生的符號(hào)表,也就是對(duì)每個(gè)變量調(diào)用unset函數(shù)。
5、模塊關(guān)閉階段(module shutdown):
該階段在SAPI關(guān)閉時(shí)執(zhí)行,與模塊初始化階段對(duì)應(yīng),這個(gè)階段主要是進(jìn)行資源的清理、php各模塊的關(guān)閉操作,同時(shí),將回調(diào)各擴(kuò)展的module shutdown鉤子函數(shù)。這是發(fā)生在所有請(qǐng)求都已經(jīng)結(jié)束之后,例如關(guān)閉fpm的操作。(這個(gè)是對(duì)于CGI和CLI等SAPI,沒(méi)有“下一個(gè)請(qǐng)求”,所以SAPI立刻開(kāi)始關(guān)閉。)
Zend 引擎:Zend引擎為PHP提供了基礎(chǔ)服務(wù),包括詞法分析 語(yǔ)法分析 ,AST抽象語(yǔ)法樹(shù)編譯 opcodes執(zhí)行,PHP的變量設(shè)計(jì)、內(nèi)存管理、進(jìn)程管理。
PHP層:綁定了SAPI層并處理與它的通信,它同時(shí)對(duì)safe_mode和open_basedir的檢測(cè)提供一致的控制層,將fopen()、fread()和fwrite()等用戶空間的函數(shù)與文件和網(wǎng)絡(luò)I/O聯(lián)系起來(lái)。
SAPI:包括了cli fpm等,把接口對(duì)外接口都抽象出來(lái),只要遵守SAPI協(xié)議便可以實(shí)現(xiàn)一個(gè)server。
拓展:zend 引擎提供了核心能力和接口規(guī)范,在此基礎(chǔ)上可以開(kāi)發(fā)拓展
php數(shù)據(jù)的底層實(shí)現(xiàn)是散列表(也叫hashTable)
PHP 可以自動(dòng)進(jìn)行內(nèi)存管理,清除不需要的對(duì)象。
PHP 使用了引用計(jì)數(shù)GC機(jī)制。
每個(gè)對(duì)象都內(nèi)含一個(gè)引用計(jì)數(shù)器 refcount,每個(gè) reference 連接到對(duì)象,計(jì)數(shù)器加 1。當(dāng) reference 離開(kāi)生存空間或被設(shè)為 NULL,計(jì)數(shù)器減 1。當(dāng)某個(gè)對(duì)象的引用計(jì)數(shù)器為零時(shí),PHP 知道你將不再需要使用這個(gè)對(duì)象,釋放其所占的內(nèi)存空間。
它是一個(gè)master和worker的架構(gòu)模式,work處理請(qǐng)求,master管理和回收子進(jìn)程。
優(yōu)化的話,曾經(jīng)有更改過(guò)它的進(jìn)程數(shù)的配置。
簡(jiǎn)述一下: 由于之前配置的靜態(tài)模式,默認(rèn)的 200 個(gè)進(jìn)程數(shù),后來(lái)有了一定的并發(fā),我就該改成 “第三種” 配置模式,配置指定數(shù)量的進(jìn)程數(shù),有個(gè)最小值和最大值(最大值這里其實(shí)是忘了,就是想這肯定不能沒(méi)有限制,畢竟硬件資源就是天花板呢),然后根據(jù)實(shí)際的請(qǐng)求數(shù),然后動(dòng)態(tài)的增加進(jìn)程數(shù)量。
以上就是關(guān)于“PHP特性、內(nèi)核及架構(gòu)是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。