php 的 opcache 和 php jit 有什么区别?

blogdaren 2017-11-24 抢沙发 1020人次

1. 概念

JIT这个概念其实来自Java,在Java里,JIT编译器的工作过程就是将字节码编译为机器码的过程。

如果把PHP和Java做对应,那么PHP编译成OPCode的过程就是Java编译为字节码的过程,而引申起来,PHP的JIT,也就是把OPCode编译为机器码的过程。

更简单的说,Zend引擎将PHP程序编译成OPCode,而后再交给PHP解释器执行,这样的过程还是一个解释执行的过程。而如果通过JIT编译为机器码,那么程序的执行效率是可以得到大幅提高的。

2. 原理

源代码(人认识)->字节码(解释器认识)->机器码(硬件认识)
A: 来看下PHP的执行流程,假设有个test.php文件,禁用opcache的流程如下:
test.php->经过zend编译->opcode->PHP解释器->机器码
B: 启用opcache的流程如下:
test.php->查找opcache缓存,如果没有则进行zend编译为opcode并缓存->opcode->PHP解释器->机器码
C: 启用jit的流程如下:
test.php->编译->机器码

3. 结论:

明显的,有了PHP-JIT,以后运行只需执行机器码,不编译,效率上会大大提高。

版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:php 的 opcache 和 php jit 有什么区别?

发表评论:

您的昵称:
电子邮件:
个人主页: