请问HHVM 是如何提升 PHP 性能的?
网友回复
php执行代码的过程
php本身是解释性语言,每一次php的请求执行都是zend解释引擎将php代码解释成opcode(操作码),opcode再通过php执行,完整的流程如下:
Opcode是一种PHP脚本编译后的中间语言,就像Java的ByteCode,或者.NET的MSL,如果要提供php的性能,可以对opcode进行缓存,流程就变成下面这个了:
但是opcode不是机器码,他最终还是需要调用c函数,这个也会降低php的性能,那怎么办呢,HHVM出现了。
HHVM是啥?
HHVM(HipHop VM)是Fackbook推出用于在执行PHP代码的虚拟机,是一个PHP的JIT编译器,具有产生快速代码和及时编译的优点。 HHVM为什么比ZendEngine快? HHVM是Facebook开发的高性能PHP虚拟机,宣称比官方Zend快9倍。 PHP使用的Zend虚拟机(VM),首先会先将PHP代码编译成二进制指令opcode,然后逐条执行,每条opcode指令都对应一个C函数。
对于PHP的用户函数、运行时局部变量、常量会存在一个Hashtable中。
执行一次C函数的开销
参数的入栈出栈
CPU寄存器状态保存
例如:在PHP中执行1000w次累加
<?php $sum = 0; // 发生1000w次C函数调用 for($i=0; $i<10000000; $i++){ $sum += $i; }
若编译为机器码情况是什么样的呢? 主频2.0GHZ的CPU每秒执行20亿次指令,函数调用则1秒只能运行1000W次。 因此,编译为机器码执行语言如C、C++、Golang...,或拥有JIT的语言如Java、NodeJS、LuaJIT、HHVM...,单从指令执行角度上看至少比PHP快几十倍。 对于字符串处理、JSON编码解码、iconv编码解码、数组操作等, PHP比C++、Java慢吗? 在PHP中此类操作都是C扩展函数完成的,性能与编译型语言一致。 PHP到底比编译型语言慢的原因在哪里呢? PHP代码中用户函数、类、对象操作等。 运算密集型 vs IO密集型 运算密集型程序指的是需大量执行内存复制操作、循环、运行指令等,瓶颈在CPU上,提升性能的解决方案就是提升CPU硬件配置、改进...
点击查看剩余70%
js如何流式输出ai的回答并折叠代码块,点击代码块右侧可预览代码?
ai大模型如何将文章转换成可视化一目了然的图片流程图图表?
大模型生成html版本的ui原型图和ppt演示文档的系统提示词怎么写?
rtsp视频直播流如何转换成websocket流在h5页面上观看?
为啥coze会开源工作流agent coze studio?
如何检测网页是通过收藏夹打开的?
python如何实现类似php的http动态脚本请求处理响应代码?
js如何实现类似php的http动态脚本请求处理响应代码?
trae与solo有啥区别不同?
vue如何让ai动态生成问卷调查多步骤表单式收集基础信息自动规划执行任务?