成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Zend引擎

CODING / 670人閱讀

摘要:簡介引擎是開源的解釋語言的腳本引擎。有兩部分組成,即編譯器和執(zhí)行器。執(zhí)行代碼會經(jīng)過如下個(gè)步驟確切的來說,應(yīng)該是的語言引擎將代碼轉(zhuǎn)換為語言片段將轉(zhuǎn)換成簡單而有意義的表達(dá)式將表達(dá)式編譯成順次執(zhí)行,每次一條,從而實(shí)現(xiàn)腳本的功能。

簡介
The Zend Engine is the open source scripting engine that interprets the PHP programming language.

Zend引擎是開源的解釋php語言的腳本引擎。

Zend有兩部分組成,即編譯器和執(zhí)行器。編譯器負(fù)責(zé)將PHP代碼編譯為抽象語法樹,然后進(jìn)一步編譯為可執(zhí)行的opcodes,這個(gè)過程相當(dāng)于GCC的工作,編譯器是一個(gè)語言實(shí)現(xiàn)的基礎(chǔ);執(zhí)行器負(fù)責(zé)執(zhí)行編譯器輸出的Opcodes,也就是執(zhí)行PHP腳本中編寫的代碼邏輯。
Opcode是將PHP代碼編譯產(chǎn)生的Zend虛擬機(jī)可識別的指令,php7共有173個(gè)Opcode,定義在zend_vm_opcodes.h中,PHP中的所有語法實(shí)現(xiàn)都是由這些opcode組成的。

Zend Engine最主要的特性就是把PHP的邊解釋邊執(zhí)行的運(yùn)行方式改為先進(jìn)行預(yù)編譯(Compile),然后再執(zhí)行(Execute)
詳細(xì)原理

見鏈接3(我沒看完,不太懂,還是太年輕啊~~)。

優(yōu)缺點(diǎn)

執(zhí)行效率大幅提升

降低解耦,可擴(kuò)展增強(qiáng)

Zend Engine 將代碼分成編譯和執(zhí)行兩大部分。一般情況下,我們的代碼完成以后就很少再去改變了。但執(zhí)行時(shí)PHP卻不得不重新編譯,耗時(shí)并且浪費(fèi)資源。(所以才有Opcache呀~)

Opcode

Opcode是一種PHP腳本編譯后的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執(zhí)行代碼會經(jīng)過如下4個(gè)步驟(確切的來說,應(yīng)該是PHP的語言引擎Zend):

  1.Scanning(Lexing) ,將PHP代碼轉(zhuǎn)換為語言片段(Tokens)
  2.Parsing, 將Tokens轉(zhuǎn)換成簡單而有意義的表達(dá)式
  3.Compilation, 將表達(dá)式編譯成Opocdes
  4.Execution, 順次執(zhí)行Opcodes,每次一條,從而實(shí)現(xiàn)PHP腳本的功能。

現(xiàn)在有的Cache比如APC、Opcache(APC止步于PHP 5.4,Zend Opcache從PHP 5.5 開始集成,取代APC。),可以使得PHP緩存住Opcodes,這樣,每次有請求來臨的時(shí)候,就不需要重復(fù)執(zhí)行前面3步,從而能大幅的提高PHP的執(zhí)行速度。
如下圖:

小插曲

有一次線上發(fā)代碼了(修改了數(shù)據(jù)庫),但是數(shù)據(jù)庫里面數(shù)據(jù)沒進(jìn)來,非常詭異,懷疑是代碼沒有發(fā)成功,后來leader在群里對運(yùn)維說Opcache(原理就是緩存Opcodes)沒有更新。。。小坑小坑

參考

http://www.careerride.com/PHP-zend-engine.aspx

https://www.kancloud.cn/nickbai/php7/363257

https://github.com/pangudashu/php7-internal/blob/master/3/zend_executor.md

http://www.nowamagic.net/librarys/veda/detail/1291

https://www.cnblogs.com/JohnABC/p/4531029.html

http://www.laruence.com/2008/06/18/221.html

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28280.html

相關(guān)文章

  • (PHP7內(nèi)核剖析-7) Zend引擎執(zhí)行過程

    1.EG(executor_globals/zend_executor_globals) PHP整個(gè)生命周期中最主要的一個(gè)結(jié)構(gòu),是一個(gè)全局變量,在main執(zhí)行前分配(非ZTS下),直到PHP退出,它記錄著當(dāng)前請求全部的信息 showImg(https://segmentfault.com/img/bV8fW0?w=960&h=777); 2.EX(execute_data/zend_execut...

    elisa.yang 評論0 收藏0
  • Zend Engine & PHP

    摘要:作為語言的核心,存在于源碼目錄中的子目錄。年,和決定重寫代碼以解決這兩個(gè)問題。最終他倆把該項(xiàng)技術(shù)的核心引擎命名為,的意思即為。語法分析語法檢查。執(zhí)行引擎執(zhí)行這些。核心核心由兩部分組成和。 Zend Engine 作為 PHP 語言的核心, Zend Engine 存在于 PHP 源碼目錄中的 Zend 子目錄。 Why Zend Engine ? PHP3 采用的是邊解釋、邊...

    GraphQuery 評論0 收藏0
  • PHP執(zhí)行原理

    摘要:執(zhí)行原理是一門應(yīng)用非常簡單,開發(fā)效率極高的一門語言,其弱類型的變量能省去程序員大量的定義變量類型轉(zhuǎn)換等的時(shí)間和精力。程序最終被翻譯為一組處理函數(shù)的順序執(zhí)行。只有減為時(shí)才會真正執(zhí)行銷毀操作。 PHP執(zhí)行原理 php是一門應(yīng)用非常簡單,開發(fā)效率極高的一門語言,其弱類型的變量能省去程序員大量的定義變量、類型轉(zhuǎn)換等的時(shí)間和精力。它是一種適用于web開發(fā)的動態(tài)語言。 1. php設(shè)計(jì)的原理和特點(diǎn)...

    silvertheo 評論0 收藏0
  • PHP底層工作原理

    摘要:因此,我們需要性能優(yōu)異的引擎合適的車輪正確的跑道三架構(gòu)從下往上四層屬于操作系統(tǒng)的底層服務(wù)器,屬于次服務(wù)器,溝通和屬于服務(wù)端編程語言,通過模塊和關(guān)聯(lián)和其他服務(wù)屬于應(yīng)用服務(wù),通過的外掛模塊和關(guān)聯(lián)參考文檔底層工作原理 一、簡介 PHP總共有三個(gè)模塊:內(nèi)核、Zend引擎、以及擴(kuò)展層 PHP內(nèi)核用來處理請求、文件流、錯(cuò)誤處理等相關(guān)操作 Zend引擎(ZE)用以將源文件轉(zhuǎn)換成機(jī)器語言,然后在虛擬...

    mumumu 評論0 收藏0
  • PHP7擴(kuò)展開發(fā)(三):參數(shù)、數(shù)組和Zvals

    摘要:告訴引擎要取的參數(shù)的信息,用來確保線程安全,返回值檢測是還是。數(shù)組遍歷假設(shè)我們需要一個(gè)取代以下功能的擴(kuò)展的遍歷數(shù)組和差很多,提供了一些專門的宏來遍歷元素或。是一個(gè)關(guān)于線程安全的動作,用于避免各線程的作用域被其他的侵入。 起步 到這已經(jīng)能聲明簡單函數(shù),返回靜態(tài)或者動態(tài)值了。定義INI選項(xiàng),聲明內(nèi)部數(shù)值或全局?jǐn)?shù)值。本章節(jié)將介紹如何接收從調(diào)用腳本(php文件)傳入?yún)?shù)的數(shù)值,以及 PHP內(nèi)核...

    hufeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<