什么是 PHP8 JIT?它能给 PHP 世界带来什么好处?我的理解是,它用于性能改进。
2 回答
PHP 中的 JIT(即时)编译器与其他解释性编程语言中的工作方式相同。它在程序启动后运行并动态编译代码(在运行时)。
在 PHP8 中,JIT 将被忽略Zend VM
,如果编译后的代码已经被缓存,它会直接发送到 CPU。它不依赖于 C 语言,并且该语言将获得开发自己的新功能的能力。
PHP8 中的 JIT 在性能上不会改变游戏规则。它会稍微改进它,但不如 PHP7 那样显着。已经有一些基准测试表明基本基准测试(CPU 密集型任务)的性能要好得多,但在实际使用的应用程序中并没有太大变化。
CPU密集型任务:
- 在 Nikita Popov 的基准测试中, nikic/PHP-Parser 的运行速度快了大约 1.3 倍
- 使用Amp编写的 hello world 应用程序的速度提高了大约 5%
- MessagePack 基准测试显示速度提高了 1.3 到 1.5 倍
新鲜 laravel 网页的结果:
- PHP 7.3:131.37 请求/秒
- PHP 8.0 + JIT:133.57 请求/秒
相对 JIT 对 PHP 8 性能源的贡献
- 它为 PHP 在 Web 之外用作高性能语言打开了大门。
- JIT 可以随着时间的推移而改进,我们的代码也可以。
如果 PHP 代码可以在运行时解释,避免使用 VM,这意味着 PHP 本身在未来有更多机会用于 CPU 密集型任务,如机器学习。
PHP 中的 JIT 配置有多种类型。您可以设置优化级别、触发器、寄存器分配和 CPU 特定的优化标志。我不会粘贴所有内容,但可能会在文档中找到(目前还没有官方 JIT 文档,只有 RFC)。
既然第一个 alpha 版本已经发布,我会说基准测试非常有希望。
与 PHP 7 相比,时间减少了大约 50%
PHP8 JIT 擅长于非平凡的任务,尤其是数学任务,它也适用于非阻塞(异步)应用程序。但是,JIT 不会一下子把 PHP 变成 C 语言,代码还是需要高度优化才能看到 JIT 的真正威力。
请参阅 Zeev Suraski 的这个 Mandelbrot 示例(概念证明),了解 PHP 8 中的 JIT 有多么强大。