PHP语言的革新----PHP7和HHVM
2017-03-16 22:25
169 查看
最近在微博上看见PHP的开发者发布的微博(@Laruence),PHP7很可能在明年出来,同时会伴随着很多底层的优化。这真是一个重磅的消息!PHP的发展又将翻开新的一页了。而目前的PHP5.6 release,就是PHP5系列的最后一个版本了。
可能会有人感到奇怪,为什么没有PHP6,PHP的开发者也回答了这个问题,是因为中途夭折了。
而里面提到的最重要的东西,就是PHPNG(下一代官方版PHP的核心执行引擎实现的内部名称),为了抗衡HHVM。
HHVM (HipHop Virtual Machine)
HHVM在作为PHP新的执行引擎,它主要的作用是:HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似与C#的CLR和Java的JVM。
HHVM的来源
Facebook早起的很多代码是使用PHP来开发的,但是,随着业务的发展,越来越成为性能的瓶颈,因此Facebook对这些PHP代码做了一个专门的优化。2008年的时候,Facebook就开始应用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。
之后的两年里,Fackbook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。
使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop存在一些问题:
(1)HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。
(2)Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。
(3)HPHPc部署步骤繁杂,这点很让PHP开发者头疼,使用和推广困难。
在2010年初,Fackbook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。
其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。
HHVM会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。
而在目前,HHVM几乎已经完全支持PHP 5.4+了,但还是有不少bug,所以不是所有应用程序都可以运行。到那个时候,PHP广受诟病的原生执行效率将会得到大幅的提升。
PHP7和PHP5系列的区别
PHP5目前的结构,底层由Zend引擎组成,Zend相当于一个用C写的一个大框架,基于这个框架之上开发出了各种各样的应用函数,也就是PHP语言。通过SAPI将PHP和web server隔离,作为统一交互接口。
图中的PHP语言结构和PHP Api(函数)是有区别的,可以阅读这篇文章:
PHP的语言结构和函数的区别
PHP5的运行方式:
我们常用的PHP运行编译内存缓存APC/opcache,所缓存的就是opcode中间字节码。中间字节码,格式有点类似于汇编语言的格式。可以使用PHP的拓展parsekit查看opcode。
HHVM的运行方式,则是生成自己格式的中间字节码,然后根据通过HHVM来解析执行。
附录概念:
(1)字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。(也就是php里常说的opcode,有点类似于汇编语言)
(2)机器码:是一系列供CPU执行的指令。通过编译器就可以把汇编转成机器码(同汇编编程),然后供CPU处理。
(3)JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。
可能会有人感到奇怪,为什么没有PHP6,PHP的开发者也回答了这个问题,是因为中途夭折了。
而里面提到的最重要的东西,就是PHPNG(下一代官方版PHP的核心执行引擎实现的内部名称),为了抗衡HHVM。
HHVM (HipHop Virtual Machine)
HHVM在作为PHP新的执行引擎,它主要的作用是:HHVM (HipHop Virtual Machine)会将PHP代码转换成高级别的字节码(通常称为中间语言)。然后在运行时通过即时(JIT)编译器将这些字节码转换为x64的机器码。在这些方面,HHVM十分类似与C#的CLR和Java的JVM。
HHVM的来源
Facebook早起的很多代码是使用PHP来开发的,但是,随着业务的发展,越来越成为性能的瓶颈,因此Facebook对这些PHP代码做了一个专门的优化。2008年的时候,Facebook就开始应用HipHop(现在成为HPHP),这是一种PHP执行引擎;最初是为了将Fackbook的大量PHP代码转成C++,以提高性能和节约资源。最初的版本成为HPHPc,是一个PHP到C++的编译器。
之后的两年里,Fackbook又向HipHop中增加了HPHPi和HPHPd,HPHPi其实就是开发版的HPHP,HPHPd则是HipHop的调试器。通过HPHPd开发人员可以单步调试运行在HipHop平台上的PHP代码。
使用HipHop的PHP代码在性能上最大可以是原生的6倍。但是,第一版的HipHop存在一些问题:
(1)HPHPc 无法完全支持PHP的所有特性,最典型的是无法支持create_function()和eval()两个函数。
(2)Facebook的开发者不得不维护两种不同的引擎(HPHPc和HPHPi),这直接导致了重复劳动和资源浪费。
(3)HPHPc部署步骤繁杂,这点很让PHP开发者头疼,使用和推广困难。
在2010年初,Fackbook因为这些问题做出了2个重大的决定。首先是将HipHop平台开源,通过这种方式来加快HipHop的发展。
其次,Facebook开始开发HipHop的更高版本,也就是HHVM(HipHop虚拟机),HHVM加强了HPHPc的健壮性,同时还修复了许多重要错误。
HHVM会将PHP代码转换成高级别的字节码(一种中间语言),在运行时即时(JIT)编译器会将这些字节码翻译成机器码。
而在目前,HHVM几乎已经完全支持PHP 5.4+了,但还是有不少bug,所以不是所有应用程序都可以运行。到那个时候,PHP广受诟病的原生执行效率将会得到大幅的提升。
PHP7和PHP5系列的区别
PHP5目前的结构,底层由Zend引擎组成,Zend相当于一个用C写的一个大框架,基于这个框架之上开发出了各种各样的应用函数,也就是PHP语言。通过SAPI将PHP和web server隔离,作为统一交互接口。
图中的PHP语言结构和PHP Api(函数)是有区别的,可以阅读这篇文章:
PHP的语言结构和函数的区别
PHP5的运行方式:
我们常用的PHP运行编译内存缓存APC/opcache,所缓存的就是opcode中间字节码。中间字节码,格式有点类似于汇编语言的格式。可以使用PHP的拓展parsekit查看opcode。
HHVM的运行方式,则是生成自己格式的中间字节码,然后根据通过HHVM来解析执行。
附录概念:
(1)字节码:是一种人类无法阅读的代码,专门用来给编译器高效执行的。当HHVM首次加载项目时,它会将所有的PHP代码转换成字节码;字节码的生成是与平台无关的。(也就是php里常说的opcode,有点类似于汇编语言)
(2)机器码:是一系列供CPU执行的指令。通过编译器就可以把汇编转成机器码(同汇编编程),然后供CPU处理。
(3)JIT(即时)编译器:即时编译是种软件优化技术,指在运行时才会去编译字节码。字节码会存放在内存中,然后JIT编译器会根据需要加载并编译所涉的字节码。
相关文章推荐
- 不依赖PHP7和HHVM,如何在PHP中使用强类型
- 不依赖PHP7和HHVM,如何在PHP中使用强类型
- 如何将PHP作为Shell脚本语言使用
- php:跨平台的服务器端嵌入式脚本语言(1)
- 发挥语言的威力--融合PHP与ASP
- php与java语言的一些比较!
- PHP语言的中回车换行
- ASP,php,jsp,ASP.net四种web平台语言的区别与前景
- php实现首页自动选择语言转跳
- php实现首页自动选择语言转跳
- Html+Asp+Php+Jsp:4种语言禁止浏览器缓存页面的方法
- 与其他语言的比较——了解ASP、PHP和JSP
- Asp,PHP,JSP,.Net几种网站开发语言比较
- php实现首页自动选择语言转跳
- 在Zeus Web Server中安装PHP语言支持
- 发挥语言的威力--融合PHP与ASP
- PHP是一种没有前途的嵌入式脚本语言?
- PHP语言入门
- Yahoo 书签系统使用 Php 语言的 symfony 框架
- 在PHP语言中使用JSON