大话php性能.docx

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大话php性能

大话PHP之性能(1)2011-12-02 08:51 佚名 百度搜索研发部官博?/art/201112/305609.htm我要评论(0)?字号:T?|?javascript:setfont(16);T本文就是围绕这么一个话题来进行探讨的。从源码、应用场景、基准性能、对比分析等几个方面深入分析PHP之性能问题,通过真实的性能数据来说话,最终找出影响PHP模块性能的关键因素。AD:关于PHP,很多人的直观感觉是PHP是一种灵活的脚本语言,库类丰富,使用简单,安全,非常适合WEB开发,但性能低下。PHP的性能是否真的就如同大家的感觉一样的差呢?本文就是围绕这么一个话题来进行探讨的。从源码、应用场景、基准性能、对比分析等几个方面深入分析PHP之性能问题,通过真实的性能数据来说话,最终找出影响PHP模块性能的关键因素。从原理分析PHP性能从原理分析PHP的性能,主要从以下几个方面:内存管理、变量、函数、运行机制、网络模型来进行分析。2.1内存管理类似Nginx的内存管理方式,PHP在内部也是基于内存池,并且引入内存池的生命周期概念。在内存池方面,PHP对PHP脚本和扩展的所有内存相关操作都进行了托管。对大内存和小内存的管理采用了不同的实现方式和优化,具体可以参考以下文档:/2011/11/09/2277.html。在内存分配和回收的生命周期内,PHP采用一次初始化申请+动态扩容+内存标识回收机制,并且在每次请求结束后直接对内存池进行重新mask。2.2变量总所周知,PHP是一种弱变量类型的语言,所以在PHP内部,所有的PHP变量都对应成一种类型Zval,其中具体定义如下:图一、PHP变量在变量方面,PHP做了大量的优化工作,比如说Reference counting和copy on writer机制。这样能够保证内存使用上的优化,并且减少内存拷贝次数(请参考/2011/11/09/php-using-internal-zval/)。在数组方面,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内部本身也是存在编译的过程。事实上,在标准的生产环境中,也都基本上利用了这个特点,比如说opcode cache工具apc、eacc、xcache等等。基于opcode cache,能到做到“PHP脚本编译一次,多次运行”的效果。从这点上,PHP就和JAVA的半编译机制非常类似。所以,从运行机制上来看,PHP的运行模式和JAVA是非常类似的,都是先产生中间码,然后运行在不同虚拟机上。2.5动态运行从上面的几个分析来看,PHP在内存管理、变量、函数、运行机制等几个方面都做了大量的工作,所以从原理来看,PHP不应该存在性能问题,性能至少也应该和JAVA比较接近。但为什么还有很多人感觉PHP慢呢?尤其是一些计算量的性能对比上,总发现PHP处理的性能相对比较低效(/u32/php.php)。这个时候就不得不谈PHP动态语言的特性所带来的性能问题了,由于PHP是动态运行时,所以所有的变量、函数、对象调用、作用域实现等等都是在执行阶段中才确定的。这个从根本上决定了PHP性能中很难改变的一些东西:在C/C++等能够在静态编译阶段确定的变量、函数,在PHP中需要在动态运行中确定,也就决定了PHP中间码不能直接运行而需要运行在Zend Engine上。说到PHP变量的具体实现,又不得不说一个东西了:hashta

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档