浅谈HHVM

来源:互联网 发布:浙江大学软件学院学费 编辑:程序博客网 时间:2024/05/22 15:48

HHVM(HipHop Virtual Machine)是可以将PHP代码转换成 高级别的字节码(通常被称为中间语言)。

其实HHVM和Java中的JVM或者C#中CLR,在运行时将这些字节码通过即时(JIT)编辑器转换为X64的机器码。

在2008年时,Facebook就开始使用HipHop(HPHP)了,是PHP的一种引擎,最初目的是将大量的PHP代码转换成C++,以提高性能和节约资源,最初的版本也就成为了HPHPC 是一个PHP到C++的编辑器。

之后Facebook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。还有就是使用HipHop的PHP代码在性能上最大可以是原生的6倍。

但是,第一版的HipHop有不少缺点,具体如下:HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。最后,HPHPc部署步骤繁杂,这点很让PHP开发者头疼。最后在2010年的时候Facebook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。HHVM是在HPHPc的基础上构建,它会将PHP代码转换成高级别的字节码(一种中间语言),在运行时JIT编译器会将这些字节码翻译成机器码。

下面是一些关于字节码、机器码和即时(JIT)编译器的概念。

字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。

机器码:是一系列供CPU执行的指令。用过汇编的都应该清楚机器码,估计没人喜欢用汇编编程。通过编译器就可以把汇编转成机器码,然后供CPU处理。

JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。

通过以上技术,HipHop和HHVM获得了性能的提升。

在即将要在成都召开的由CSDN重磅打造的互联网应用架构实战峰会、运维技术与实战峰会 上,也将有百度的胡志广,他将会带来以《支撑百亿级流量PHP引擎HHVM在百度的架构实战》为题的技术分享,内容将会涉及到Baidu为何会使用HHVM、HHVM in baidu、HHVM vs PHP7。


1 0