首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
Swoole 协程是否支持 PHP 的 JIT ?
## 什么是 JIT? `JIT`(`Just-In-Time Compilation`,及时编译)是一种运行时编译技术,它在程序运行时将字节码转换为机器码,以提高代码的执行效率。 `PHP 8` 引入了 `JIT`,旨在优化性能,特别是在计算密集型任务中。对于 `CPU` 密集型操作(例如复杂的计算),`JIT` 可以提供显著的性能提升。 `PHP` 官方团队从 `8.0` 一直到 `8.4` 一直在优化 `JIT`,提升性能。目前 `PHP JIT` 性能已经逐渐接近了 `Java` 和 `Node.js V8` 的水平。 ## Swoole 对 JIT 的支持 很多 `PHPer` 误以为 `Swoole` 不支持 `JIT`,其实是错误的认识。实际上只要配置得当, `Swoole` 下完全可以开启 `JIT`。 ## JIT 配置详解 使用 JIT 前,检查 `php.ini` 中下列几项配置: - `zend_extension=opcache.so`,`JIT` 实现是在 `opcache` 扩展中,必须要开启 `opcache` 才能使用 - `opcache.enable=On` 开启 `JIT` - `opcache.enable_cli=On` 在命令行模式下开启,请注意 `Swoole`、`Workerman`模式下必须要开启此选项才能使用 `JIT` - `opcache.jit_buffer_size=128M` 为编译 `JIT` 代码保留的共享内存量,必须是大于 `0` 的数值 - `opcache.jit=1225` 设置 `JIT` 优化等级,参考:https://www.php.net/manual/zh/opcache.configuration.php#ini.opcache.jit-buffer-size ## JIT 优化设置 `opcache.jit`的值是一个字符串,或`4`字节数字,每个字节表示一项设置 ### 字符串值 - disable:完全禁用,无法在运行时启用 - off:禁用,但可以在运行时启用 - tracing/on:使用追踪 JIT。默认启用并推荐给大部分用户 - function:使用函数 JIT "tracing" 模式对应 `CRTO = 1254`,"function" 模式对应 `CRTO = 1205`。 ### 数字 针对高级用法,此选项接受 `4` 位整数 `CRTO`,其中的位分别是: #### C(特定 CPU 优化 flag) - 0:禁用特定 `CPU` 优化 - 1:如果 `CPU` 支持则启用 `AVX` #### R(寄存器分配) - 0:不执行寄存器分配 - 1:执行局部域寄存器分配 - 2:执行全局寄存器分配 #### T(触发) - 0: 在脚本加载时编译所有函数 - 1: 在第一次执行时编译函数 - 2:第一次请求时分析函数,然后编译最热门函数 - 3:动态分析和编译热门函数 - 4:目前未使用 - 5:使用追踪 JIT。动态分析和为热门代码段编译追踪 #### O(优化级别) - 0:关闭 `JIT` 优化 - 1:最小 `JIT`(调用标准 `VM` 处理程序) - 2:内联 `VM` 处理程序 - 3:使用类型推断 - 4:使用调用图 - 5:优化整个脚本 在 `Swoole` 协程下,第三项 `T(触发)` 的等级必须为大于或等于`2`,否则 `Swoole Runtime Hook` 可能不会生效。例如可设置为 `opcache.jit=1225` ## JIT 性能测试 参考:https://php.watch/articles/jit-in-depth > 此测试是基于 `PHP 8.0`,当前的 `8.3` 版本相比又有了较大的性能提升
发布于2年前 · 1 次浏览 · 来自
分享
Rango-H
## 什么是 JIT? `JIT`(`Just-In-Time Compilation`,及时编译)是一种运行时编译技术,它在程序运行时将字节码转换为机器码,以提高代码的执行效率。 `PHP 8` 引入了 `JIT`,旨在优化性能,特别是在计算密集型任务中。对于 `CPU` 密集型操作(例如复杂的计算),`JIT` 可以提供显著的性能提升。 `PHP` 官方团队从 `8.0` 一直到 `8.4` 一直在优化 `JIT`,提升性能。目前 `PHP JIT` 性能已经逐渐接近了 `Java` 和 `Node.js V8` 的水平。 ## Swoole 对 JIT 的支持 很多 `PHPer` 误以为 `Swoole` 不支持 `JIT`,其实是错误的认识。实际上只要配置得当, `Swoole` 下完全可以开启 `JIT`。 ## JIT 配置详解 使用 JIT 前,检查 `php.ini` 中下列几项配置: - `zend_extension=opcache.so`,`JIT` 实现是在 `opcache` 扩展中,必须要开启 `opcache` 才能使用 - `opcache.enable=On` 开启 `JIT` - `opcache.enable_cli=On` 在命令行模式下开启,请注意 `Swoole`、`Workerman`模式下必须要开启此选项才能使用 `JIT` - `opcache.jit_buffer_size=128M` 为编译 `JIT` 代码保留的共享内存量,必须是大于 `0` 的数值 - `opcache.jit=1225` 设置 `JIT` 优化等级,参考:https://www.php.net/manual/zh/opcache.configuration.php#ini.opcache.jit-buffer-size ## JIT 优化设置 `opcache.jit`的值是一个字符串,或`4`字节数字,每个字节表示一项设置 ### 字符串值 - disable:完全禁用,无法在运行时启用 - off:禁用,但可以在运行时启用 - tracing/on:使用追踪 JIT。默认启用并推荐给大部分用户 - function:使用函数 JIT "tracing" 模式对应 `CRTO = 1254`,"function" 模式对应 `CRTO = 1205`。 ### 数字 针对高级用法,此选项接受 `4` 位整数 `CRTO`,其中的位分别是: #### C(特定 CPU 优化 flag) - 0:禁用特定 `CPU` 优化 - 1:如果 `CPU` 支持则启用 `AVX` #### R(寄存器分配) - 0:不执行寄存器分配 - 1:执行局部域寄存器分配 - 2:执行全局寄存器分配 #### T(触发) - 0: 在脚本加载时编译所有函数 - 1: 在第一次执行时编译函数 - 2:第一次请求时分析函数,然后编译最热门函数 - 3:动态分析和编译热门函数 - 4:目前未使用 - 5:使用追踪 JIT。动态分析和为热门代码段编译追踪 #### O(优化级别) - 0:关闭 `JIT` 优化 - 1:最小 `JIT`(调用标准 `VM` 处理程序) - 2:内联 `VM` 处理程序 - 3:使用类型推断 - 4:使用调用图 - 5:优化整个脚本 在 `Swoole` 协程下,第三项 `T(触发)` 的等级必须为大于或等于`2`,否则 `Swoole Runtime Hook` 可能不会生效。例如可设置为 `opcache.jit=1225` ## JIT 性能测试 参考:https://php.watch/articles/jit-in-depth > 此测试是基于 `PHP 8.0`,当前的 `8.3` 版本相比又有了较大的性能提升
赞
1
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2024-09-03
青山依旧在
php 导出银行卡号避免科学技术法
赞
0
回复