一直以来,大家都在讨论 PHP 8 中是否会支持 JIT(Just-In-Time)即时编译执行功能,最新消息是官方已经确认将其引入。

PHP 实现了一个虚拟机 Zend VM,它会将人类可读脚本编译成虚拟机理解的指令,也就是操作码,这个执行阶段就是“编译时(Compile Time)”;在“运行时(Runtime)”执行阶段,虚拟机 Zend VM 会执行这些编译好的操作码。

通常编译时与运行时两个阶段是独立分开的,脚本编译完成后,像 APC 与 OPCache 这样的字节码缓存组件会缓存这些操作码。而 JIT 去掉了编译时阶段,它将这编译时与运行时两个阶段合为一体,实现即时编译与执行。

JIT 是一种编译器策略,它将代码表述为一种中间状态,在运行时将其转换为依赖于体系结构的机器码,并即时执行。在 PHP 中,这意味着 JIT 将为 Zend VM 生成的指令视为中间表述,并以依赖于体系结构的机器码执行,也就是说托管代码的不再是 Zend VM,而是更为底层的 CPU。

虽然自 PHP 7.0 以来,通过优化核心数据结构 HashTable、强化 Zend VM 中某些操作码与持续改进 OPCache 的 Optimizer 组件等具体措施,PHP 性能得到了显著提升,但是实际上这些优化似乎已经走到极限了。现在 JIT 从底层着手,被认为是目前提升 PHP 性能的最佳出路。

关于是否引入 JIT 的官方投票结果已于近日公布,因为大部分核心开发者投了赞成票,所以 PHP 8 中将会支持 JIT。

另外值得一提的是,PHP JIT 对于使用 PHP 的网站来说提速可能并不明显,因为 JIT 在 CPU 密集型的代码上效果最好,而一般情况下,用 PHP 编写的程序都是 I/O 密集型的。

简单来说就是,PHP 程序往往受限于 I/O 而不是 CPU,使 PHP 代码运行速度变慢的因素往往是它们正在执行的 I/O 操作,包括连接、读取和写入数据库、高速缓存、文件与套接字等。

PHP 中 CPU 密集型代码的一个例子是 Zend/bench.php。

那么 PHP 中的 JIT 将会在哪里发挥作用呢?答案是数学领域。

关于 PHP JIT 的详细介绍,可以查看:https://blog.krakjoe.ninja/2019/03/php-gr8.html。

本文经授权转自开源中国(ID:oschina2013)。


 热 文 推 荐 

☞贾跃亭吹过的牛,苹果来实现?

☞一行代码引发的恐惧

☞Google 产品的消亡史!

☞@程序员,你会教自己的孩子学习编程吗?

☞代码重构!你敢吗?!

☞30位90后霸榜! 福布斯: 比你年轻、比你有颜、比你有才华, 就是他们了!

☞Facebook开源图嵌入“神器”:无需GPU,高效处理数十亿级实体图形 | 极客头条

☞OpenStack已死?恐怕你想多了 | 技术头条

☞刺激!我31岁敲代码10年,明天退休!

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

你点的每个“在看”,我都认真当成了喜欢

PHP 8 中确认支持 JIT!相关推荐

  1. PHP 8 确认支持 JIT

    百度智能云 云生态狂欢季 热门云产品1折起>>>   一直以来,大家都在讨论 PHP 8 中是否会支持 JIT(Just-In-Time)即时编译执行功能,最新消息是官方已经确认将其 ...

  2. android 北斗定位代码_iPhone 11 确认支持北斗导航,真相来了!

    点击 哎咆科技 关注我们 最近"北斗"火了. 因为7月31日,北斗三号全球卫星导航系统正式开通.截止8月7日,微博话题"北斗三号全球卫星导航系统正式开通"已有5 ...

  3. 要求在ASP.NET Core 2.2中确认电子邮件——第2部分

    目录 介绍 使用代码 先决条件 步骤1--将UnconfirmedEmail属性添加到IdentityUser 第2步--更新数据库 第3步--添加更改电子邮件页面 第4步--修改配置文件 第5步-- ...

  4. 关于CFree5.0中设置支持C99模式

    关于C-Free5.0中设置支持C99模式,分为以下几个步骤: 1.打开C-Free5.0,在左上角找到'构建(B)' 2.展开'构建(B)',点击最下方的'构建选项' 3.在'编译'一栏看到红色框区 ...

  5. java项目打包提示-source1.5中不支持diamond

    maven项目打包提示-source1.5中不支持diamond IDEA解决办法: 方法一: idea左上角settings> Build, Execution, Deployment> ...

  6. 俄罗斯总统确认支持自由软件

    <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> 2月23日,Glyn Moody ...

  7. Seam的中文化支持

    一.预备知识 Seam的中文化支持是通过资源包文件来实现的.资源包是Java属性元数据格式的一种应用,它以键/值对的形式保存元数据.这些键/值对按照一定的规则进行分组,并绑定到某个bundle名称下. ...

  8. java中是否支持多重继承_java支持多重继承吗 JAVA特性面试题:

    1.简要介绍java程序的健壮性. 答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏. 2.为什 ...

  9. maven install 报错 source 1.5 中不支持 lambda 表达式

    maven install 报错 source 1.5 中不支持 lambda 表达式 maven-compiler-plugin 在编译的时候如果不指定jdk的版本,会默认使用jdk1.5 所以在编 ...

最新文章

  1. confluence 编辑器这次没有加载_代码编辑器横评:为什么 VS Code 能拔得头筹
  2. OpenCV图像识别初探-50行代码教机器玩2D游戏
  3. 哔哩哔哩公布2021年度弹幕:“破防了”
  4. vnc连接服务器怎么修改配置,vnc连接服务器怎么配置
  5. 近一半程序员单身、年薪低于 15 万,程序员扎心现状大调查!
  6. sql server中的注释快捷键
  7. 沟通CTBS V5.0发布, 南北通及安全性成最大亮点
  8. ios 去掉cell最后一条分割线
  9. 判断某个值是否存在指定枚举类中
  10. 日常Java练习题(每天进步一点点系列)
  11. DataParallel使用
  12. 软件测试知识点 fiddler抓包教程
  13. (转)74系列芯片使用汇总
  14. Java中serialVersionUID作用
  15. Android集成FBReader(精简版)指南
  16. 二十五、PHP内核探索:常量的实现 ☞ 脱离C语言和数学讨论底层都是耍流氓
  17. 《中华颂》朗诵比赛准备
  18. 聚观早报 | ChatGPT 停止 Plus 付费;李子柒油管广告收益登顶热搜
  19. cocos2d_lua 2.5D
  20. 笔记本安装固态涉及到的注意事项

热门文章

  1. 【docker】【pycharm】pycharm配置docker远程连接
  2. leetcode python3 简单题28. Implement strStr()
  3. linux系统安装自主分区,Linux系统的安装(自动引导安装、网络安装、分区选择)...
  4. n进制快速转化成10进制
  5. Flutter实战一Flutter聊天应用(二十)
  6. 碱度控制化学品行业调研报告 - 市场现状分析与发展前景预测
  7. 两级压缩机行业调研报告 - 市场现状分析与发展前景预测
  8. 做游戏,学编程(C语言) 11 2048
  9. “开发者有奖大调查”第二批中奖名单公布,还有更多好礼等你来拿~
  10. 重识 SQLite,简约不简单