php - 什么是 PHP8 JIT 编译器

标签 php php-8

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

最佳答案

PHP 中的 JIT(即时)编译器的工作方式与其他解释型编程语言中的相同。它在程序启动后运行并动态编译代码(在运行时)。
在 PHP8 JIT 中会省略 Zend VM如果编译后的代码已经被缓存,它会直接发送到 CPU。它将不依赖于 C 语言,该语言将有能力开发自己的新功能。
JIT scheme https://thephp.website/en/issue/php-8-jit/
PHP8 中的 JIT 不会改变性能。它会稍微改进它,但不会像 PHP7 那样显着。已经有一些基准测试表明,在基本基准测试(CPU 密集型任务)中的性能要好得多,但在实际使用的应用程序中并没有太大变化。
Article about JIT performance
CPU 密集型任务:


新鲜 laravel 网页的结果:
  • PHP 7.3: 131.37 req/s
  • PHP 8.0 + JIT: 133.57 req/s

相对 JIT 对 PHP 8 性能的贡献 source
PHP 8 performance https://www.php.net/images/php8/scheme.svg
Nice article with pros and cons for JIT.
  • It opens the door for PHP to be used as a very performant language outside of the web.
  • The JIT can be improved upon over time, as well could our code.

如果 PHP 代码可以在运行时避免 VM 进行解释,则意味着 PHP 本身在 future 有更多机会执行 CPU 密集型任务,例如机器学习。
PHP 中有多种类型的 JIT 配置。您可以设置优化级别、触发器、寄存器分配和 CPU 特定的优化标志。我不会粘贴所有内容,但可能会在 documentation 中找到(目前还没有官方的 JIT 文档,只有 RFC)。

关于php - 什么是 PHP8 JIT 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60581060/

相关文章:

php - 将 ZipArchive 与 PHP 8 和临时文件一起使用

php - Netbeans IDE(12.2)的: Syntax error with PHP 8.0 constructor promotion

php - 用PHP同时连接和查询两个Mysql数据库

java - 如何?使用 Retrofit2 将当前日期从 Android 插入到 mySQL 数据库中

PHP - 如何将页面标题添加到 URL?以及如何使用 PHP 创建干净的 url

php - 如何检测是否启用了 PHP JIT

php - 迁移到 PHP 8.0 : array_key_exists() improved performance. .. 不理解

laravel - 参数 #1 必须是模型类型,Pest\Mock\Mock 给定

php - mysql中将行转换为列

php - 什么会导致 CI​​ 错误地返回空值?