资讯专栏INFORMATION COLUMN

Zend引擎

CODING / 566人阅读

摘要:简介引擎是开源的解释语言的脚本引擎。有两部分组成,即编译器和执行器。执行代码会经过如下个步骤确切的来说,应该是的语言引擎将代码转换为语言片段将转换成简单而有意义的表达式将表达式编译成顺次执行,每次一条,从而实现脚本的功能。

简介
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呀~)

Opcode

Opcode是一种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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28280.html

相关文章

  • (PHP7内核剖析-7) Zend引擎执行过程

    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...

    elisa.yang 评论0 收藏0
  • Zend Engine & PHP

    摘要:作为语言的核心,存在于源码目录中的子目录。年,和决定重写代码以解决这两个问题。最终他俩把该项技术的核心引擎命名为,的意思即为。语法分析语法检查。执行引擎执行这些。核心核心由两部分组成和。 Zend Engine 作为 PHP 语言的核心, Zend Engine 存在于 PHP 源码目录中的 Zend 子目录。 Why Zend Engine ? PHP3 采用的是边解释、边...

    GraphQuery 评论0 收藏0
  • PHP执行原理

    摘要:执行原理是一门应用非常简单,开发效率极高的一门语言,其弱类型的变量能省去程序员大量的定义变量类型转换等的时间和精力。程序最终被翻译为一组处理函数的顺序执行。只有减为时才会真正执行销毁操作。 PHP执行原理 php是一门应用非常简单,开发效率极高的一门语言,其弱类型的变量能省去程序员大量的定义变量、类型转换等的时间和精力。它是一种适用于web开发的动态语言。 1. php设计的原理和特点...

    silvertheo 评论0 收藏0
  • PHP底层工作原理

    摘要:因此,我们需要性能优异的引擎合适的车轮正确的跑道三架构从下往上四层属于操作系统的底层服务器,属于次服务器,沟通和属于服务端编程语言,通过模块和关联和其他服务属于应用服务,通过的外挂模块和关联参考文档底层工作原理 一、简介 PHP总共有三个模块:内核、Zend引擎、以及扩展层 PHP内核用来处理请求、文件流、错误处理等相关操作 Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟...

    mumumu 评论0 收藏0
  • PHP7扩展开发(三):参数、数组和Zvals

    摘要:告诉引擎要取的参数的信息,用来确保线程安全,返回值检测是还是。数组遍历假设我们需要一个取代以下功能的扩展的遍历数组和差很多,提供了一些专门的宏来遍历元素或。是一个关于线程安全的动作,用于避免各线程的作用域被其他的侵入。 起步 到这已经能声明简单函数,返回静态或者动态值了。定义INI选项,声明内部数值或全局数值。本章节将介绍如何接收从调用脚本(php文件)传入参数的数值,以及 PHP内核...

    hufeng 评论0 收藏0

发表评论

0条评论

CODING

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<