【发布时间】:2020-06-20 04:36:54
【问题描述】:
什么是 PHP8 JIT?它能给 PHP 世界带来什么好处? 我的理解是,它是用来提高性能的。
【问题讨论】:
什么是 PHP8 JIT?它能给 PHP 世界带来什么好处? 我的理解是,它是用来提高性能的。
【问题讨论】:
PHP 中的 JIT(即时)编译器与其他解释型编程语言的工作方式相同。它在程序启动后运行并动态编译代码(在运行时)。
在 PHP8 中,JIT 将省略 Zend VM,如果编译后的代码已经被缓存,它会直接发送到 CPU。它将不依赖于 C 语言,并且该语言将能够开发自己的新功能。
PHP8 中的 JIT 在性能上不会改变游戏规则。它会稍微改进它,但不如 PHP7 那样显着。已经有一些基准测试表明,基本基准测试(CPU 密集型任务)的性能要好得多,但在实际使用的应用程序中并没有太大变化。
CPU 密集型任务:
- nikic/PHP-Parser 在 Nikita Popov 的基准测试中运行速度快了大约 1.3 倍
- 使用 Amp 编写的 hello world 应用程序的速度提高了大约 5%
- MessagePack benchmarks showed 1.3 to 1.5 times speed up
新鲜的laravel网页结果:
- PHP 7.3:131.37 请求/秒
- PHP 8.0 + JIT:133.57 请求/秒
JIT 对 PHP 8 性能的相对贡献source
Nice article with pros and cons for JIT.
- 它为 PHP 在 Web 之外用作高性能语言打开了大门。
- JIT 可以随着时间的推移而改进,我们的代码也可以。
如果 PHP 代码可以在运行时解释,避免使用 VM,这意味着 PHP 本身在未来有更多机会处理 CPU 密集型任务,例如机器学习。
PHP 中的 JIT 配置有多种类型。您可以设置优化级别、触发器、寄存器分配和 CPU 特定的优化标志。我不会粘贴所有内容,但可以在documentation 中找到(目前还没有官方 JIT 文档,只有 RFC)。
【讨论】:
现在第一个 Alpha 版已经发布,我想说基准测试非常有前途。
与 PHP 7 相比,时间减少了大约 50%
PHP8 JIT 在非琐碎任务(尤其是数学任务)中表现出色,并且对于非阻塞(异步)应用程序也很有前景。不过JIT不会一下子把PHP变成C语言,代码还是需要高度优化才能看到JIT的真正威力。
查看 Zeev Suraski 的 Mandelbrot 示例 (Proof-of-Concept),了解 PHP 8 中的 JIT 有多么强大。
【讨论】: