PHP8 的JIT

 ✒️ @halomaster 📅 01 Apr 2023, 09:45 GMT⋮ 【后端开发】 

PHP8引入了JIT(Just-In-Time)编译器,这是一个增强型编译器,可以在运行时将PHP源代码转换为本地机器码,从而提高代码的执行速度。 JIT编译器利用了现代计算机的硬件优势,例如现代CPU的指令级并行性、缓存技术和指令预取技术,从而加速PHP代码的执行。与传统的解释型语言相比,JIT编译器可以在代码开始执行之前将其编译为本地机器码,从而避免了解释器的解释过程,大大提高了代码的执行速度。 PHP8的JIT编译器使用了一种叫做`Tracing JIT`的技术,它可以在运行时动态地跟踪代码执行路径,对经常执行的代码块进行编译,从而加速代码的执行。同时,JIT编译器还使用了一些优化技术,例如缓存、代码预取和指令级并行性,进一步提高了代码的执行速度。


[1] @halomaster • 01 Apr 2023, 09:49 GMT 
PHP 8 中引入了 JIT 编译器,意思是 Just-In-Time 编译器。 它可以在运行时将 PHP 脚本编译成机器码,从而提升执行效率。 JIT 编译器的主要优势有: faster execution - 由于不需要在每次运行时解释 PHP 脚本,直接运行机器码,所以执行速度更快。 reduced memory usage - 编译成机器码后,不再需要 PHP 脚本本身,可以释放更多内存。 improved caching - 编译好的机器码可以缓存,下次运行时直接使用缓存,而不是再次编译。 一些启用 JIT 编译器的配置: php.ini 中的 jit 配置: jit = On // 启用 JIT 编译器 jit.debug = Off // 关闭调试信息 Xdebug 扩展也提供了 JIT 调试支持。 使用 jit_trace 指令可以开启 JIT 调试跟踪。 支持的平台: x64 位系统(AMD64/EM64T/x86_64) x86 32 位系统 arm64 示例: <?php $a = 1; $b = 2; $c = $a + $b; echo $c; ?> 上述脚本在第一次运行时可能还是解释执行,但在第二次运行时,就会直接使用编译成机器码的版本,所以会更快。 并在更多场景下,使用 JIT 编译器,PHP 的执行效率会有明显提高。


[2] @halomaster • 01 Apr 2023, 09:53 GMT 
Tracing JIT是一种动态的、基于跟踪的JIT编译技术,其目标是在代码运行时跟踪代码的执行路径,对经常执行的代码块进行编译,从而优化代码的执行速度。 Tracing JIT的工作原理是,当程序执行到一个函数或循环时,它会记录下代码的执行路径,并将这些路径存储在一个"trace"中。当同样的路径被经常执行时,Tracing JIT会将这些路径编译为本地机器码,从而加速代码的执行。 Tracing JIT的优点是可以在运行时动态地优化代码,因此可以适应不同的应用场景和数据输入。同时,它还可以根据实际运行情况对代码进行优化,并在优化后重新编译代码,从而进一步提高执行速度。


[3] @halomaster • 01 Apr 2023, 10:18 GMT 
一般来说,在开发过程中,我们通常会关掉 JIT 编译器的优化,以便于调试。因为编译后的机器码较难调试。 但是,PHP 8 提供了 Debug JIT 的功能,可以启用`部分`的 JIT 优化,同时又保留调试信息,这样可以同时 enjoying JIT 的速度提升,又保证调试的可用性。 启用 Debug JIT 的方法是: 在 php.ini 中设置 jit.debug = On ; 或者通过 ini_set('jit.debug', 1) 在脚本开始设置 ;


1 of 1 pages  3 replies