php执行原理与Opcache、JIT原理

PHP的架构

在这里插入图片描述

1、上层应用:这就是我们平时编写的PHP程序,通过不同的spai方式得到各种各样的应用模式,如何通过webserver实现web应用、在命令行下已脚本方式运行等等。
2、Sapi:Sapi全称Server Application Programming Interface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
3、PHP内核:php内核获取服务器传递的环境变量信息,调用PHP函数,类,扩展模块
4、Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension的典型应用)。
5、Zend引擎:编译器和执行器,Zend整体用纯C实现,是PHP的内核部分,他将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如:hashtable、OO)、内存分配机制及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

我们需要:性能优异的引擎(Zend)+合适的车轮(Ext)+正确的跑道(Sapi)。

PHP的执行流程
从最初我们编写的PHP脚本->到最后脚本被执行->得到执行结果,这个过程,其实可以分为如下几个阶段:

1.Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)

Zend Engine(ZE),调用词法分析器(Lex生成的,源文件在 Zend/zend_language_sanner.l),
将我们要执行的PHP源文件,去掉空格 ,注释,分割成一个一个的token。

2.Parsing, 将Tokens转换成简单而有意义的表达式 [ 抽象语法树(AST) ]
3.Compilation, 将表达式编译成Opocdes

ZE会将得到的token forward给语法分析器(yacc生成,
源文件在Zend/zend_language_parser.y),生成一个一个的op code,opcode一般会以op
array的形式存在,它是PHP执行的中间语言

4.Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

最后,ZE调用zend_executor来执行op array,输出结果。

( opcode对应的是一个C函数,执行一条opcode就是执行这条opcode对应的C函数,而这个C函数已经被编译为机器码了 )

PHP opcache JIT
源代码(人认识)->字节码(解释器认识)->机器码(硬件认识)

来看下PHP的执行流程,假设有个a.php文件,不启用opacache的流程如下:

a.php->经过zend编译->opcode->PHP解释器->机器码

启用opacache的流程如下

a.php->查找opacache缓存,如果没有则进行zend编译为opcode并缓存->opacode->PHP解释器->机器码

启用jit的流程如下

a.php->编译->机器码

以后都只执行机器码,不编译,效率上高了很多

在这里插入图片描述

左图是PHP8之前的Opcache流程示意图, 右图是PHP8中的Opcache示意图, 可以看出几个关键点:

Opcache会做opcode层面的优化,比如图中的俩条opcode合并为一条 PHP8的JIT目前是在Opcache之中提供的
JIT在Opcache优化之后的基础上,结合Runtime的信息再次优化,直接生成机器码 JIT不是原来Opcache优化的替代,是增强
目前PHP8只支持x86架构的CPU

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值