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

发布于 2022-09-05 02:37:57 字数 244 浏览 20 评论 0

opcache 是用于缓存 zend 引擎编译生成的 opcode,下次就无需编译。
最近听说了 php jit,看了一下 jit 的概念,描述是这样的:

JIT编译(just-in-time compilation),即即时编译,狭义指某段代码即将第一次被执行时进行编译,而后则不用编译直接执行,它为动态编译的一种特例。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

墨落成白 2022-09-12 02:37:57

源代码(人认识)->字节码(解释器认识)->机器码(硬件认识)
来看下PHP的执行流程,假设有个a.php文件,不启用opacache的流程如下:
a.php->经过zend编译->opcode->PHP解释器->机器码
启用opacache的流程如下
a.php->查找opacache缓存,如果没有则进行zend编译为opcode并缓存->opacode->PHP解释器->机器码
启用jit的流程如下
a.php->编译->机器码
以后都只执行机器码,不编译,效率上高了很多

最美不过初阳 2022-09-12 02:37:57

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

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

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

目前热门的几个脚本语言,都已经拥有了自己的JIT,唯独PHP这方面还有欠缺。所以,有所期待吧,期待PHP 8

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文