摘要:簡介引擎是開源的解釋語言的腳本引擎。有兩部分組成,即編譯器和執行器。執行代碼會經過如下個步驟確切的來說,應該是的語言引擎將代碼轉換為語言片段將轉換成簡單而有意義的表達式將表達式編譯成順次執行,每次一條,從而實現腳本的功能。
簡介
The Zend Engine is the open source scripting engine that interprets the PHP programming language.
Zend引擎是開源的解釋php語言的腳本引擎。
Zend有兩部分組成,即編譯器和執行器。編譯器負責將PHP代碼編譯為抽象語法樹,然后進一步編譯為可執行的opcodes,這個過程相當于GCC的工作,編譯器是一個語言實現的基礎;執行器負責執行編譯器輸出的Opcodes,也就是執行PHP腳本中編寫的代碼邏輯。
Opcode是將PHP代碼編譯產生的Zend虛擬機可識別的指令,php7共有173個Opcode,定義在zend_vm_opcodes.h中,PHP中的所有語法實現都是由這些opcode組成的。
Zend Engine最主要的特性就是把PHP的邊解釋邊執行的運行方式改為先進行預編譯(Compile),然后再執行(Execute)詳細原理
見鏈接3(我沒看完,不太懂,還是太年輕啊~~)。
優缺點執行效率大幅提升
降低解耦,可擴展增強
Zend Engine 將代碼分成編譯和執行兩大部分。一般情況下,我們的代碼完成以后就很少再去改變了。但執行時PHP卻不得不重新編譯,耗時并且浪費資源。(所以才有Opcache呀~)
OpcodeOpcode是一種PHP腳本編譯后的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行代碼會經過如下4個步驟(確切的來說,應該是PHP的語言引擎Zend):
1.Scanning(Lexing) ,將PHP代碼轉換為語言片段(Tokens) 2.Parsing, 將Tokens轉換成簡單而有意義的表達式 3.Compilation, 將表達式編譯成Opocdes 4.Execution, 順次執行Opcodes,每次一條,從而實現PHP腳本的功能。
現在有的Cache比如APC、Opcache(APC止步于PHP 5.4,Zend Opcache從PHP 5.5 開始集成,取代APC。),可以使得PHP緩存住Opcodes,這樣,每次有請求來臨的時候,就不需要重復執行前面3步,從而能大幅的提高PHP的執行速度。
如下圖:
有一次線上發代碼了(修改了數據庫),但是數據庫里面數據沒進來,非常詭異,懷疑是代碼沒有發成功,后來leader在群里對運維說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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28280.html
1.EG(executor_globals/zend_executor_globals) PHP整個生命周期中最主要的一個結構,是一個全局變量,在main執行前分配(非ZTS下),直到PHP退出,它記錄著當前請求全部的信息 showImg(https://segmentfault.com/img/bV8fW0?w=960&h=777); 2.EX(execute_data/zend_execut...
摘要:作為語言的核心,存在于源碼目錄中的子目錄。年,和決定重寫代碼以解決這兩個問題。最終他倆把該項技術的核心引擎命名為,的意思即為。語法分析語法檢查。執行引擎執行這些。核心核心由兩部分組成和。 Zend Engine 作為 PHP 語言的核心, Zend Engine 存在于 PHP 源碼目錄中的 Zend 子目錄。 Why Zend Engine ? PHP3 采用的是邊解釋、邊...
摘要:執行原理是一門應用非常簡單,開發效率極高的一門語言,其弱類型的變量能省去程序員大量的定義變量類型轉換等的時間和精力。程序最終被翻譯為一組處理函數的順序執行。只有減為時才會真正執行銷毀操作。 PHP執行原理 php是一門應用非常簡單,開發效率極高的一門語言,其弱類型的變量能省去程序員大量的定義變量、類型轉換等的時間和精力。它是一種適用于web開發的動態語言。 1. php設計的原理和特點...
摘要:告訴引擎要取的參數的信息,用來確保線程安全,返回值檢測是還是。數組遍歷假設我們需要一個取代以下功能的擴展的遍歷數組和差很多,提供了一些專門的宏來遍歷元素或。是一個關于線程安全的動作,用于避免各線程的作用域被其他的侵入。 起步 到這已經能聲明簡單函數,返回靜態或者動態值了。定義INI選項,聲明內部數值或全局數值。本章節將介紹如何接收從調用腳本(php文件)傳入參數的數值,以及 PHP內核...
閱讀 898·2019-08-30 15:54
閱讀 1466·2019-08-30 15:54
閱讀 2400·2019-08-29 16:25
閱讀 1292·2019-08-29 15:24
閱讀 749·2019-08-29 12:11
閱讀 2506·2019-08-26 10:43
閱讀 1227·2019-08-26 10:40
閱讀 466·2019-08-23 16:24