请问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%