php性能大话

浏览:1566 发布日期:2014/01/16 分类:心情闲聊 关键字: 程序
1缘起
关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言,库类丰富,使用简单,安 全,非常适合WEB开发,但性能低下。PHP的性能是否真的就如同大家的感觉一样的差呢?本文就是围绕这么一个话题来进行探讨的。从源码、应用场景、基准 性能、对比分析等几个方面深入分析PHP之性能问题,通过真实的性能数据来说话,最终找出影响PHP模块性能的关键因素。
2从原理分析PHP性能
从原理分析PHP的性能,主要从以下几个方面:内存管理、变量、函数、运行机制、网络模型来进行分析。
2.1内存管理
类似Nginx的内存管理方式,现金网程序PHP在内部也是基于内存池并且引入内存池的生命周期概念在内存池方面PHP对PHP脚本和扩展的所有内存相关操作都进行了托管。对大内存和小内存的管理采用了不同的实现方式和 优化,具体可以参考以下文档:在内存分配和回收的生命周期 内,PHP采用一次初始化申请+动态扩容+内存标识回收机制,并且在每次请求结束后直接对内存池进行重新mask。
2.2变量
总所周知,PHP是一种弱变量类型的语言,所以在PHP内部,所有的PHP变量都对应成一种类型Zval,其中具体定义如下:

PHP变量
在变量方面,PHP做了大量的优化工作,比如说Reference counting和copy on writer机制。这样能够保证内存使用上的优化,并且减少内存拷贝次数。在数组方面,PHP内部采用高效的hashtable来实现。
2.3函数
在PHP内部,所有的PHP函数都回转化成内部的一个函数指针。比如说扩展中函数
ZEND_FUNCTION ( my_function );//类似function my_function(){}
在内部展开后就会是一个函数
void zif_my_function ( INTERNAL_FUNCTION_PARAMETERS );
void zif_my_function(
int ht,
zval * return_value,
zval * this_ptr,
int return_value_used,
zend_executor_globals * executor_globals
);
从这个角度来看,PHP函数在内部也是对应一个函数指针。
2.4运行机制
在话说PHP性能的时候,很多人都会说“C/C++是编译型,JAVA是半编译型,PHP是解释型”。也就是说现金网程序代码PHP是先动态解析再代码运行的,所以从这个角度来看,PHP性能必然很差。
的确,从PHP脚本运行来输出,的确是一个动态解析再代码运行的过程。具体来说,PHP脚本的运行机制如下图所示:

PHP运行机制
PHP的运行阶段也分成三个阶段:
●Parse。语法分析阶段。
● Compile。编译产出opcode中间码。
● Execute。运行,动态运行进行输出。
通过上图也可以看出,其实在PHP内部本身也是存在http://sshicxjw.com编译的过程。事实上,在标准的生产环境中,也都基本上利用了这个特点,比如说opcode cache工具apc、eacc、xcache等等。基于opcode cache,能到做到“PHP脚本编译一次,多次运行”的效果。从这点上,PHP就和JAVA的半编译机制非常类似。
所以,从运行机制上来看,PHP的运行模式和JAVA是非常类似的,都是先产生中间码,然后运行在不同虚拟机上。
最佳答案
评论( 相关
后面还有条评论,点击查看>>