⑴ hhvm的文件句柄数是什么
博客 – 伯乐在线
首页最新文章在线课程业界开发 IT技术 设计 创业IT职场投稿更多 »
伯乐在线 > 首页 > 所有文章 > php > Hack:用于HHVM的一种新编程语言
Hack:用于HHVM的一种新编程语言
2014/03/21 | 分类: PHP, 业界 | 1 条评论 | 标签: FACEBOOK, HACK, PHP
分享到: 2
Qnext前端交互沙龙
Android-Service系列之多线程断点续传下载
Android必学—AsyncTask基础
Oracle 12c 在OEL6上的安装
本文由 伯乐在线 - rokety 翻译。未经许可,禁止转载!
英文出处:Facebook Code。欢迎加入翻译小组。
想急切尝试Hack?传送门:http://hacklang.org/
今天我们发行了Hack,一门能够在HHVM上与PHP无缝交互的编程语言。Hack的静态类型兼顾及协调了PHP的快速开发周期。同时增加了在其他现代编程语言中常见的许多功能。
我们已经在Facebook上部署了Hack,并且取得了巨大的成功。在过去的几年里,借助自家开发的一些重构工具,我们几乎将有的PHP代码迁移到了Hack上。
我们也很自豪地向外发布一个开源版本的Hack,作为我们的 HHVM runtime 平台的一部分,它现在同时支持Hack和PHP。
【补充信息】:HipHop for PHP是一系列PHP脚本语言的程式码转换器的集合,它包含HPHPc、HPHPi、HPHPd以及HHVM,这四个脚本引擎各有所不同,但是他们共用相同的执行时期(Runtime)及工具集(Toolset)。HipHop是由Facebook所建立,他们用它来节省服务器的资源。HipHop 由 C++ 和 C 语言所编写,发布时代码量已高达60万行,它以自由软件发布,采用PHP许可证3.01版。
⑵ PHP 5.5 / PHP5.6 / PHP-NG 和 HHVM 哪个性能更好
PHP版本的当然是越高性能越好。
所以PHP5.6比5.5强一点点,NG现在已经整合到了PHP7里面去了。
而HHVM是face的东西,在国内支持的不好。
现在比较有争议的是HHVM与PHP7,不过至于哪个更胜一筹根本没必要争议了。服务器的环境综合起来远比他俩的优缺点高,所以还是支持正统的PHP主线即可。
能用7不用5.6,能用高版本不用低版本即可。
⑶ hhvm 怎么将php转为c++
HHVM 是 Facebook 开发的高性能 PHP 虚拟机,宣称比官方的快9倍,我很好奇,于是抽空简单了解了一下,并整理出这篇文章,希望能回答清楚两方面的问题:
HHVM 到底靠谱么?是否可以用到产品中?
它为什么比官方的 PHP 快很多?到底是如何优化的?
你会怎么做?
在讨论 HHVM 实现原理前,我们先设身处地想想:假设你有个 PHP 写的网站遇到了性能问题,经分析后发现很大一部分资源就耗在 PHP 上,这时你会怎么优化 PHP 性能?
比如可以有以下几种方式:
方案1,迁移到性能更好的语言上,如 Java、C++、Go。
方案2,通过 RPC 将功能分离出来用其它语言实现,让 PHP 做更少的事情,比如 Twitter 就将大量业务逻辑放到了 Scala 中,前端的 Rails 只负责展现。
方案3,写 PHP 扩展,在性能瓶颈地方换 C/C++。
方案4,优化 PHP 的性能。
⑷ hhvm和php的载入so的不同
原因:
php在搜索全局符号前先搜索库内的符号,避免同名符号的冲突。
hhvm直接搜索全局符号。
hhvm扩展载入方式:
源码位置:hphp/runtime/ext/extension.cpp
# if defined(RTLD_GROUP) && defined(RTLD_WORLD) && defined(RTLD_PARENT)#define DLOPEN_FLAGS (RTLD_LAZY|RTLD_GLOBAL|RTLD_GROUP|RTLD_WORLD|RTLD_PARENT)# else#define DLOPEN_FLAGS (RTLD_LAZY|RTLD_GLOBAL)# endifstatic void* dlopen(const char *dso) {#ifdef HAVE_LIBDLreturn ::dlopen(dso, DLOPEN_FLAGS);#elsereturn nullptr;#endif}
php扩展载入方式:
源码位置:hphp/runtime/ext_zend_compat/php-src/Zend/zend.h
# if defined(RTLD_GROUP) && defined(RTLD_WORLD) && defined(RTLD_PARENT)#define DL_LOAD(libname)dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT)# elif defined(RTLD_DEEPBIND)#define DL_LOAD(libname)dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_DEEPBIND)# else#define DL_LOAD(libname)dlopen(libname, RTLD_LAZY | RTLD_GLOBAL)# endif
关键点
RTLD_DEEPBIND:在搜索全局符号前先搜索库内的符号,避免同名符号的冲突。
dlopen说明
功能:打开一个动态链接库,并返回动态链接库的句柄
包含头文件:
#include
函数定义:
void * dlopen( const char * pathname, int mode);
函数描述:
mode是打开方式,其值有多个,不同操作系统上实现的功能有所不同,在linux下,按功能可分为三类:
1、解析方式
RTLD_LAZY:在dlopen返回前,对于动态库中的未定义的符号不执行解析(只对函数引用有效,对于变量引用总是立即解析)。
RTLD_NOW: 需要在dlopen返回前,解析出所有未定义符号,如果解析不出来,在dlopen会返回NULL,错误为:: undefined symbol: xxxx…….
2、作用范围,可与解析方式通过“|”组合使用。
RTLD_GLOBAL:动态库中定义的符号可被其后打开的其它库重定位。
RTLD_LOCAL: 与RTLD_GLOBAL作用相反,动态库中定义的符号不能被其后打开的其它库重定位。如果没有指明是RTLD_GLOBAL还是RTLD_LOCAL,则缺省为RTLD_LOCAL。
3、作用方式
RTLD_NODELETE: 在dlclose()期间不卸载库,并且在以后使用dlopen()重新加载库时不初始化库中的静态变量。这个flag不是POSIX-2001标准。
RTLD_NOLOAD: 不加载库。可用于测试库是否已加载(dlopen()返回NULL说明未加载,否则说明已加载),也可用于改变已加载库的flag,如:先前加载库的flag为RTLD_LOCAL,用dlopen(RTLD_NOLOAD|RTLD_GLOBAL)后flag将变成RTLD_GLOBAL。这个flag不是POSIX-2001标准。
RTLD_DEEPBIND:在搜索全局符号前先搜索库内的符号,避免同名符号的冲突。这个flag不是POSIX-2001标准。
返回值:
打开错误返回NULL
成功,返回库引用
编译时候要加入 -ldl (指定dl库)
⑸ php7 更新后对于 python 会造成怎样的冲击python+c 扩展能否 ...
php7更新后号称性能直追facebook的HHVM,在得到这样“人人可获得”的性能提升后会对python特别是在web开发领域将造成冲击的一个扩展。
⑹ PHP和Java有什么不一样的呢
第一、数据库访问比较
PHP可编译成具有与许多数据库相连接的函数。将自己编写外围的函数去间接存取数据库。通过这样的途径当更换使用的数据库时,可以轻松地修改编码以适应这样的变化。但PHP提供的数据库接口支持彼此不统一,比如对Oracle,MySQL,SQL2000的接口,彼此都不一样。由于PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。
第二、系统的技术架构比较
分层是将系统进行有效组织的方式,分而治之的思想是计算机领域中非常重要的思想。在好的分层思想引导下,便能实现“高内聚、低耦合”,也能将具体的问题 割裂开来,易于控制、易于延展,更易于分配资源。PHP只能实现简单的分布式两层或三层的架构,而JAVA在这方面就十分强大,可以实现多层的网络架构。运用MVC的设计模式,可使电子商务软件具有更加高效、合理的系统架构。技术架构的落后,使运用PHP编写的电子商务软件先天不足,而后天又无法补足其先天上的劣势。使得系统在可拓展性、需求应变性上与JAVA编写的电子商务软件系统的差距越来越大。架构的差距,注定了PHP做的电子商务充其量是个小家碧玉,始终无法和JAVA这种大家闺秀同台竞技。
第三、安全性对比
在JAVA的面前,PHP丢掉了很多的优势。在代码的安全性上尤为突出。PHP的开发程序在别人拿到代码后,可以很容易的进行修改。而JAVA开发的程序由于无法看到完整的源代码,只能看到一些编译好的类文件.class,所以安全性较高。加之系统架构的优势,在安全性上PHP和JAVA是相去甚远。如果非要将PHP和JAVA在安全性上做个比较的话,同一个小偷光顾PHP那是随便拿来随便改,想拿什么拿什么,拿的高兴还能大笔一辉某某到此一游。而光顾JAVA的时候,便会发现警察把守,内设自动报警装置,即便突破重重阻扰后进入居室。那值钱的东西都放在加密后的保险柜中,只能望洋兴叹、铩羽而归。
第四、前瞻性和拓展性
从整体来说,PHP适用于中小型系统,而JAVA适用于大型系统。PHP能够将单一的事件做好,但却不适合完成集成度较高的多项并发事件。为什么说PHP适合中小型系统而不适合做大系统呢?
首先,PHP缺乏多层结构支持。而对于大型的系统负荷站点,只能采用分布计算。将数据库、应用逻辑层和表示逻辑层彼此分开,并将同层的根据流量分开,组成二维数组。而PHP恰恰缺乏这种支持。
其次,PHP提供的数据库接口不统一,要将多个不同的数据库数据统一需要花费很大的力气。而JAVA则没有这种缺陷,可通过SUN JAVA的JAVA Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application Server获得结构支持。如ProBIZ的Merchant one电子商务软件产品系列。
⑺ Thinkphp3.2支持hhvm吗
支持的!!!
⑻ php框架yaf好还是Laravel好
yaf很少有公司用吧
做这个的也很少
不推荐
适用场景太窄,而且会带来额外的运维麻烦。
类似yaf,Phalcon 这些 C 扩展的框架,除了带来性能的提升外,几乎没有别的优势,所以它的场景非常明确,就是牺牲运维和开发舒适度,追求 PHP 极限性能的场景。
1. 它并不是唯一的提升性能的办法,比起 db 端,web 端水平扩展非常容易,nginx 负载均衡,或者弄个 haproxy,把机器堆起来,基本也就解决问题了。追求单机性能,上 HHVM 难度也并不大。
2. 网站在访问量变大的过程中,往往最先顶不住的是 db,除非你的需求特殊,或者你的网站已经大到某种程度,你花在 db 端优化的时间绝对超过你花在 web 端的时间。
3. 因为是pecl扩展,运维 部署 开发都带来了一定的麻烦。不想展开了,稍微想想应该就能明白。
总而言之,除非需求特殊,都不建议项目上 yaf,人生苦短,请用 Laravel。
⑼ nginx+hhvm和nginx+php-fpm的区别
hhvm也是php的一种,但是语法比现有的php语法更高效,因为它要声明变量类型,也是服务器
⑽ 如何评价thinkphp5.0
ThinkPHP5 重新颠覆了之前的版本。
1.支持 Composer,PHPunit(中大型项目必备的依赖管理和测试框架)
2.使用同 yii2 一样的类惰性加载(性能暴升)
3.大量参考了 Laravel 风格,还保证了以往 ThinkPHP 简单易学(优雅并且易学)
4.引入了 php5.4 特性 Traits 拓展(多重继承,以前的关联模型,视图模型混合一起用)
5.终于遵循 PSR 规范了!终于遵循 PSR 规范了!终于遵循 PSR 规范了!
符合PSR-4的自动加载规范(专门写给CI党:PSR-4 是命名空间的自动加载规范哦)
6.以前单字母全局函数改成了别名函数(M,D,S,C等,除了易学好用还不会污染全局)
7.兼容 php 7,局部兼容 hhvm
目前 tp5 已经发布了 RC2 版,已经可以稳定可靠的为你的项目提供支持了
官方文档:[ ThinkPHP5.0完全开发手册 ]
2016年4月23日更
1.tp5 发布了 RC3 版,重构了 Model 类(跟 Laravel 很像)
2.重构了自动验证,现在的自动验证独立为验证器功能,支持场景等新特性。
3.废弃了单字母函数,是的。M,D 你再也找不到了,3.2.3 想无痛升级不太可能了。但是你可以通过 helper.php 文件自己命名 M,D 的别名函数
4.获取器,修改器,类型自动转换等等