什么是 PHP8 JIT 编译器

San*_*San 6 php php-8

什么是 PHP8 JIT?以及它能给 PHP 世界带来哪些优势?我的理解是,它用于性能改进。

Jso*_*owa 6

PHP 中的 JIT(即时)编译器的工作方式与其他解释型编程语言中的相同。它在程序启动后运行并动态编译代码(在运行时)。

在 PHP8 中 JIT 会省略Zend VM,如果编译后的代码已经缓存,它会直接发送到 CPU。它将不依赖于 C 语言,该语言将有能力开发自己的新功能。

JIT 方案 https://thephp.website/en/issue/php-8-jit/

PHP8 中的 JIT 不会改变性能。它会稍微改进它,但不会像 PHP7 那样显着。已经有一些基准测试表明,在基本基准测试(CPU 密集型任务)中的性能要好得多,但在实际使用的应用程序中并没有太大变化。

关于 JIT 性能的文章

CPU 密集型任务:

新鲜 laravel 网页的结果:

  • PHP 7.3:131.37 请求/秒
  • PHP 8.0 + JIT:133.57 请求/秒

相对 JIT 对 PHP 8 性能源的贡献 PHP 8 性能 https://www.php.net/images/php8/scheme.svg

很好的文章,其中包含 JIT 的优点和缺点。

  • 它为 PHP 被用作网络之外的高性能语言打开了大门。
  • 随着时间的推移,JIT 可以得到改进,我们的代码也可以。

如果 PHP 代码可以在运行时避免 VM 进行解释,则意味着 PHP 本身在未来有更多机会执行 CPU 密集型任务,例如机器学习。

PHP 中有多种类型的 JIT 配置。您可以设置优化级别、触发器、寄存器分配和 CPU 特定的优化标志。我不会粘贴所有内容,但可能会在文档中找到(目前还没有官方 JIT 文档,只有 RFC)。