当前位置: 首页 > 后端技术 > PHP

ZendEngine简介

时间:2023-03-29 14:24:57 PHP

ZendEngine是解释PHP编程语言的开源脚本引擎。ZendEngine是一个解释PHP语言的开源脚本引擎。Zend由编译器和执行器两部分组成。编译器负责将PHP代码编译成抽象语法树,然后进一步编译成可执行的操作码。这个过程相当于GCC的工作。编译器是语言实现的基础;executor负责执行编译器输出的Opcodes,即执行PHP脚本中编写的代码逻辑。Opcode是PHP代码编译生成的Zend虚拟机可识别的指令。php7中有173个Opcode,定义在zend_vm_opcodes.h中。PHP中的所有语法实现都是由这些操作码组成的。ZendEngine最大的特点是将PHP的解释和执行的运行方式改为先预编译(Compile),再执行(Execute)。年轻~~)。优缺点执行效率大大提高,解耦减少,扩展性增强。ZendEngine将代码分为两部分:编译和执行。一般情况下,我们的代码完成后很少改动。但是PHP在执行过程中要重新编译,既费时又浪费资源。(所以才有了Opcache~)OpcodeOpcode是PHP脚本编译后的一种中间语言,就像Java的ByteCode,或者.NET的MSL。PHP执行代码会经过以下四个步骤(准确的说应该是PHP的语言引擎Zend):1.扫描(Lexing),将PHP代码转化为语言片段(Tokens)2.解析,将Tokens转化为简单的和有意义的表达式3.Compilation,将表达式编译成Opocdes4.Execution,依次执行Opcodes,一次一个,从而实现PHP脚本的功能。现在一些Cache比如APC,Opcache(APC停在PHP5.4,ZendOpcache从PHP5.5开始集成替代APC),可以让PHP缓存Opcodes,这样每次有请求来,就不用去执行了反复前3步可以大大提高PHP的执行速度。如下图:一个小插曲曾经把代码发到网上(修改了数据库),但是数据库里的数据没有进来,很奇怪。怀疑是代码没有发送成功。后来leader跟群里的运维说Opcache(原理就是缓存Opcodes)没有更新。..小坑小坑参考http://www.careerride.com/PHP-zend-engine.aspxhttps://www.kancloud.cn/nickbai/php7/363257https://github.com/pangudashu/php7-internal/blob/master/3/zend_executor.mdhttp://www.nowamagic.net/librarys/veda/detail/1291https://www.cnblogs.com/JohnABC/p/4531029.htmlhttp://www.laruence.com/2008/06/18/221.html