hiphop-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 6498003
  • 博文数量: 1159
  • 博客积分: 12444
  • 博客等级: 上将
  • 技术积分: 12570
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-13 21:34
文章分类

(1159)

  • (164)
  • (104)
  • (65)
  • (101)
  • (10)
  • (39)
  • (1)
  • (16)
  • (268)
  • (4)
  • (16)
  • (10)
  • (13)
  • (28)
  • (12)
  • (9)
  • (17)
  • (16)
  • (48)
  • (51)
  • (80)
  • (12)
  • (27)
  • (14)
  • (34)
  • (0)
文章存档

(126)

(350)

(56)

(91)

(182)

(193)

(138)

(23)

我的朋友
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: php

2015-10-28 23:07:42




hiphop for php 在技术上并不是一个 php 的编译器,它用来将 php 源码转成高度优化的 c 代码并使用 g 进行编译,这是 facebook 公司推出的。转换过程如下图所示:


用 facebook官方博客(无法直接访问)上项目负责人赵海平(北大1987届遗传与分子生物专业,普林斯顿计算机科学博士)的话 说,hiphop项目对facebook影响巨大。它目前已经支撑了facebook 90%的web流量。由于hiphop,facebook web服务器上的cpu使用平均减少了50%,从而大大减少了服务器的需求。为了让这一改进也惠及社区,他们决定将之开源,希望能够进一步帮助提高更多大 型复杂php网站的可伸缩性。

php和facebook的问题

众所周知,facebook的前端主要是用php写的。赵海平说,过去六年facebook从php语言的进展上获益良多。php非常简单,易学易用,好读好调试,因此新工程师成长很快,有利地促进了facebook的更快的创新。

php 是一种脚本语言,其好处是编程效率高,能够支持产品的快速迭代。但是与传统的编译语言相比,脚本语言的cpu和内存使用效率不好。随着 ajax技术的广泛采用,加上sns对动态要求较高,这些缺点更显得突出。对于每月超过4000亿次pv的facebook来说,如何实现扩展,尤其具有 挑战性。

常见的办法是直接用c 重写php应用中比较复杂的部分,作为php扩展。实际上,php就转变为一种胶水语 言,连接前端html和c 应用 逻辑。从技术角度讲这也没有问题,但是增加了技能需求,能够在整个应用上工作的工程师数量就大大减少了。学习c 只是编写php扩展的第一步,接下来还 要理解zend api。由于facebook的工程团队较小,每个工程师要支持100万以上的用户。有些代码不是团队里每个人都能看懂,这对于facebook是无法接 受的。

facebook网站本身的可伸缩性更具挑战性,因为几乎每次页面浏览都是有个性化体验的登录用户发起。浏览凯发app官方网站主页时,系统需要查询所有朋友、朋友最重要的状态更新、 根据隐私设置筛选结果,然后还要显示评论、照片等等动态,这一切都需要在一秒内完成。

自 2007年以来,facebook曾写过几种不同办法解决这些问题。其中包括用另一种语言重写facebook,但是由于开发的复杂性和速度等 原因,未能实现。他们还重写了php的核心部分zend引擎,并提交给了php项目,但最终还是没有获得所需的性能。最后,他们选择了hiphop,终于 得偿所愿。

有了hiphop,工程师可以编写代码,用php编写组合最后页面的逻辑,并能够继续快速迭代,同时后端服务使用c , erlang, java, python编写,提供新闻提要、搜索、聊天和其他核心功能。

hiphop开发故事

赵 海平透露,项目最初是来自几年前facebook公司一次hackathon活动(员工在一个晚上自由发挥,实验新的想法),他手工将php转 换为c 代码,虽然语法上很类似,但是无论是cpu还是内存使用,转换后的c 代码都大大优于php。于是他想,如果构建一个系统,编程实现转换,会 怎么样呢?

在此之前,已经有了不少改善php性能的方法。zend引擎在运行时转换php源代码为运行在zend虚拟机上 的opcode。开源项目apc和 eaccelerator将输出缓存,为大多数php网站所使用。此外,还有zend server这样的商业产品,通过opcode优化和缓存,提高php速度。赵海平选择了另一条道路,将php直接转为c ,然后再变成本地机器码。当 然,有许多开源项目也是同样的思路,roadsend和phc编译为c,quercus编译为java,而phalanger编译为.net。

hackathon 之后8个月,赵海平拿出了原型,足以说明这条路可以走通,编译后的代码的确更快。不久,iain proctor和minghui yang加入进来。接下来又开发了10个月,在生产服务器上测试了6个月。然后正式上线部署,6个月之后,facebook 90%以上的web流量都使用了hiphop。

按赵海平的说法,凭借hiphop,facebook web服务器上的cpu使用平均减少了50%,从而大大减少了服务器的需求。项目对facebook影响巨大。为了让这一改进也惠及社区,他们决定将之开 源,希望能够进一步帮助提高更多大型复杂php网站的可伸缩性。
hiphop的原理

hiphop将php代码转换为高度优化的c 代码,然后再用g 编译器编译。它可以保持语义等效地执行源代码,但为了提高性能,牺牲了一些很少用到的特性,比如eval()。

hiphop 开发中的主要困难在于,在php和c 这两种很不一样的语言之间怎么实现转换。虽然php也可以写一些很巧妙的动态特性,但是大多 数php代码还是非常简单的。if (…) {…} else {..} 比foo($x) { include $x; } 肯定更常见。这为性能提高提供了机会。hiphop生成的代码尽可能地使用函数和变量的静态绑定。同时,还使用类型推演来选出变量最可能对应的某个类型, 从而节省内存。

转换过程分三步:

1. 静态分析。收集声明关系和依赖关系等信息。

2. 类型推演。选择最合适的类型,是c 的标量?还是string, array, classes, object或者variant。

3. 代码生成。大部分直接将php语句和表达式对应为c 的语句和表达式。

在开发过程中,还有一个副产品:hphpi,是一个实验性的解释器。通过它,不编译php源代码也可以运行。它已经用于hiphop自身的调试中。

hiphop在保持了php优点的同时,也兼得了c 的性能优势。项目总共有30万行代码,5000多个单元测试。所有这些都将以php开源许可证形式发布到github。

更多信息,可以申请加入hiphop的邮件列表:

http://groups.google.com/group/hiphop-php-dev

转载自:http://news.cnblogs.com/n/56377/

阅读(2899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图