HHVM简介(译)
原文链接:http://coderoncode.com/2013/07/24/introduction-hhvm.html
“HHVM(HIpHop Virtual Machina)把PHP代码转换成高层次的字节码(普遍认为是一种中间语言)。然后这样的字节码在运行时被JIT(just-in-time)编译器动 态地转换成x64机器码。基于这样的考虑,HHVM和包括C#/CLR和Java/JVM在内的其他语言中的虚拟机类似。”
有点长的历史
在2008年早期Facebook网站便工作在HipHop(一个PHP执行引擎,现在是HPHP)上。其原始的动机便是把Facebook网站中 大量的PHP代码转换成C++代码,以便节约资源和提升应用性能。其原始版本便是HPHPc(一个把PHP代码转换成C++代码的编译器)。
在接下来的两年时间里Facebook网站继续工作在HipHop上,这时候的HipHop增加了HPHPi(一个HPHP的”开发模式”版本)和 HPHPd(HipHop debugger)。运行在HipHop平台上的PHP应用程序允许开发者查看和单步执行代码并且可以交互式地调试。
在巅峰时期,运行在HipHop上的PHP代码在性能上是运行在ZEND引擎上的PHP代码的6倍。然而,在HipHop的第一次迭代版上仍然有几个缺点:
1、HPHPc不是完全的支持PHP语言,最明显的便是不支持create_function和eval这两个函数。诚然,我并不认为对于不支持eval这个函数是件坏事。
2、Facebook的开发者必须维护两个不同的引擎(HPHPc和HPHPi),这样的结果便是导致重复的工作和浪费资源。
3、最后,HPHPc需要完全不同的部署过程,这样会妨碍到它被PHP开发者所采纳。
鉴于这些问题,Facebook公司在2010年早期采取了两个关键行动。其一便是把HipHop平台开源了,开源这样的一个项目是一个伟大的方 式,便于构建一个围绕着这个项目的社区并且可以从社区中获取到来自外界的帮助。其二,Facebook公司开始了HipHop在现代版本上的发展,这便是 HHVM(HipHop virtual Machine)。HHVM提升了HPHPc的健壮性并且修正了许多关键性的问题。
HHVM建立在HPHPc的顶端,其工作方式便是把PHP代码转换成高层次的字节码(一种中间语言)。这样的字节码在运行时被JIT(Just-In-Time)编译器动态地转换成机器码。
如果你像我一样,你可能对字节码、机器码和Just-In-Time编译器还有着模糊的记忆。所以,让我们暂时偏离一下主题快速地回顾下这些概念,然后讲解下他们是如何在HHVM中扮演关键性的角色。
字节码、机器码以及JIT,哦,我的…!
字节码:它是一个人们读不懂的代码,被设计来让解释器或者编译器高效执行的。当HHVM第一次导入我们的项目,它把所有的PHP代码转换成字节码这样的中间形式。产生的字节码和特定类型的计算机结构无关,因此可以很方便地在不同的系统间移植。
机器码:它是一组被设计成可以由CPU直接执行的指令。如果你曾经玩过Assembly(谁没玩过呢?),你一定能很好的理解什么是机器码。对于没有兴趣玩assembly或者类似语言的极少数的你们来说,机器码是由编译器或者解释器产生的并且可以直接被CPU执行的代码。
JIT(Just In Time)编译器:Just in time编译技术是用来提升软件性能的一项技术。它的实现原理便是在执行期间编译存储在内存中字节码,JIT编译器导入这些字节码并且编译成所需要的部分。
通过应用这些技术所获得的性能和速度便能给HipHop及随后的HHVM提供核心优势。保持一个PHP代码库,同时实现性能上堪比编译过的应用程序。
目前的HHVM基本上支持整个的PHP5.4版本,然而HHVM仍然有妨碍到一些应用程序执行的许多bugs。基于这样的原因,Facebook公 司设置的目标便是能让开源的顶尖的前20个PHP应用程序运行在HHVM上。第一个运行在其上的最流行的应用便是Wordpress。
接下来
现在我们对于HHVM究竟是做什么的及其优势有了很好的了解,并且对于运行在其上的应用程序我们可以很方便的开始测试了。在接下来的文章里,我会介 绍到如何在虚拟机上安装HHVM,以及在你的应用程序上运行基准测试,最后(双手合十),介绍如何在HHVM上运行Magento。
更多文章请关注我的个人博客:http://www.nomoneynowife.com
HHVM简介(译)的更多相关文章
- 常用数据结构及复杂度 array、LinkedList、List、Stack、Queue、Dictionary、SortedDictionary、HashSet、SortedSet
原文地址:http://www.cnblogs.com/gaochundong/p/data_structures_and_asymptotic_analysis.html 常用数据结构的时间复杂度 ...
- [转]swift 学习资源 大集合
今天看到了一个swift的学习网站,里面收集了很多学习资源 [转自http://blog.csdn.net/sqc3375177/article/details/29206779] Swift 介绍 ...
- PHP ~与各加速工具的性能对比~
参与测试的加速器:Xcache,Opcache,hhvm Xcache简介 前面已经介绍了PHP加速器的原理和功用(参见LAMP架构之PHP-FPM 服务器),xcache作为目前使用广泛的PHP ...
- 爬虫开发python工具包介绍 (1)
本文来自网易云社区 作者:王涛 本文大纲: 简易介绍今天要讲解的两个爬虫开发的python库 详细介绍 requests库及函数中的各个参数 详细介绍 tornado 中的httpcilent的应用 ...
- 【译】Android系统简介—— Activity
续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 现代3D图形编程学习-基础简介(2) (译)
本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...
- 现代3D图形编程学习-基础简介(1) (译)
本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...
- 【译】用jQuery 处理XML-- DOM(文本对象模型)简介
用jQuery 处理XML--写在前面的话 用jQuery 处理XML-- DOM(文本对象模型)简介 用jQuery 处理XML--浏览器中的XML与JavaScript 用jQuery 处理XML ...
随机推荐
- .NET程序集(Assembly)
在.NET 中,新引入了一个程序集的概念,就是指经由编译器编译得到的,供CLR进一步编译执行的那个中间产物,在WINDOWS系统中,它一般表现为.dll,或者是.exe的格式,但是要注意,它们跟普通意 ...
- 删除已分配IP的静态IP地址池
如果静态IP地址池已经分配了IP,则无法直接将其静态IP地址池删除,会提示出错:“已经有IP被分配,需要先将其回收,再删除” 如下: 查看IP地址池: Get-SCStaticIPAddressPoo ...
- apache+php配置中遇到的问题
在安装apache+php配置中遇到的问题: LoadModule php5_module "D:/PHP/php5apache2_4.dll"PHPIniDir "D: ...
- Ubuntu安装一:VM安装具体解释
1.下载VM中文版:http://download.pchome.net/system/sysenhance/down-4673-1.html,解压后双击安装包: 2.点击:下一步 3.允许安装协议, ...
- Nginx重要结构request_t解析之http请求的获取
请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 本文主要参考为<深入理解nginx模块开发与架构解析>一书,处理用户请求部分,是一篇包含作者理解的读书笔记.欢迎指正,讨论. ...
- 自定义HttpHandler配置iis8.0
配置环境,window8 ,iis8.0,.net Framework4.0,托管管道模式“经典” 步骤 (1)进入iis管理器,选中要设置的网站-->功能视图-->MIME类型--> ...
- 台湾书籍代购网址——2013-08-25 16
台湾书籍代购 博客来http://www.books.com.tw 三民http://www.sanmin.com.tw 诚品http://www.eslite.com 金石堂http://www.k ...
- sed命令详解--转
1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...
- 关于Java安全的书
关于Java安全的书http://automationqa.com/forum.php?mod=viewthread&tid=2831&fromuid=21
- 在Windows下自动运行Modelsim
首先声明:该文章是在刘志伟老师的<Modelsim的Tcl命令>的基础上写的,希望我们能越来越自动化. 1.编写好源文件.包含asyn_fifo.v.fifomem.v.rptr_empt ...