请问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%
python如何调用openai的api实现知识讲解类动画讲解视频的合成?
html如何直接调用openai的api实现海报可视化设计及文本描述生成可编辑海报?
f12前端调试如何找出按钮点击事件触发的那段代码进行调试?
abcjs如何将曲谱播放后导出mid和wav格式音频下载?
python如何将曲子文本生成音乐mp3或wav、mid文件
python中mp3、wav音乐如何转成mid格式?
js在HTML中如何将曲谱生成音乐在线播放并下载本地?
python如何实现在windows上通过键盘来模拟鼠标操作?
python如何给win10电脑增加文件或文件夹右键自定义菜单?
python如何将音乐mp3文件解析获取曲调数据?