opcode缓存

opcode缓存

Opcode是operation code(操作码)的简称,一种中间码。PHP代码执行会经过如下4个步骤:

  • 首先,Zend Engine(Zend引擎),调用词法分析器(Lex生成的,源文件在 Zend/zend_language_sanner.l), 将我们要执行的PHP源文件,去掉空格 ,注释,分割成一个一个的token。
  • 然后,Zend引擎会将得到的token forward给语法分析器(yacc生成, 源文件在 Zend/zend_language_parser.y),生成一个一个的op code,opcode一般会以op array的形式存在,它是PHP执行的中间语言。
  • 最后,Zend引擎调用zend_executor来执行op array,输出结果。

缓存Opcodes ,这样,每次有请求来临的时候,就不需要重复执行前面3步,从而能大幅的提高PHP的执行速度。


APC(Alternative PHP Cache)——PHP opcode缓存 AlternativePHPCache(APC)是一个开放自由的PHPopcode缓存。它的目标是提供一个自由、开放,和健全的框架用于缓存和优化PHP的中间代码。PHP官方手册。APC是一个PHP缓存。它在内存中存储PHP页面并且减少了硬盘的I/O。这对于性能的提升十分明显。你甚至可以在CPU使用率下降50%的情况下提升系统50%的性能。此»PECL扩展未与PHP捆绑。安装此PECL扩展相关的信息可在手册中标题为PECL扩展的安装章节中找到。更多信息如新的发行版本、下载、源文件、维护人员信息及变更日志等,都在此处:»http://pecl.php.net/package/apc.版本的问题:PHP5.0+版本,APC都支持。Linux、Unix操作系统都支持。win操作系统的DLL文件,PHP官方只支持PHP5.3+版本。PHP5.0~5.2版本,若安装APC就不能安装zendoptimizer,两者冲突。若必须安装zendoptimizer,那么只能安装其他的opcode缓存软件,例如eacceleratorPHP5.3+版本,PHP放弃了对zendoptimizer的支持。win系统下安装APC1、在win下使用APC,需要php_ap


CLI —— PHP的命令行模式 php本身就是一种脚本语言,不过我们一般都是通过apache来执行php,当然php也是可以通过命令行来执行的,和perl等语言类似。从版本4.3.0开始,PHP提供了一种新类型的SAPI(ServerApplicationProgrammingInterface,服务端应用编程端口)支持,名为CLI,意为CommandLineInterface,即命令行接口。顾名思义,该SAPI模块主要用作PHP的开发外壳应用。CLISAPI和其它SAPI模块相比有很多的不同之处,我们将在本章中详细阐述。值得一提的是,CLI和CGI是不同的SAPI,尽管它们之间有很多共同的行为。在PHP5中,CLI存在于主文件夹中,名为php.exe,而CGI版本名为php-cgi.exe。从PHP5起,一个名为php-win.exe的新文件随包发布。它相当于CLI版本,但是php-win不输出任何内容,便不提供控制台(不会弹出“DOS窗口”)。这种方式类似于php-gtk。需要使用--enable-cli-win32选项来配置它。CLISAPI和其它SAPI模块相比的显著区别:与CGISAPI不同,其输出没有任何头信息。尽管CGISAPI提供了取消HTTP头信息的方法,但在CLISAPI中并


PHP执行的底层机制 PHP是一个被广泛应用的脚本语言,因为它的成功,所以很多时候,我们应用PHP的时候是更不不需要考虑底层到底是怎么实现的。在这篇文章中,我会从整个PHP的执行期入手,大致的介绍下各个阶段,词法分析,语法分析,opcode等等。从最初我们编写的PHP脚本->到最后脚本被执行->得到执行结果,这个过程,其实可以分为如下几个阶段:php底层执行机制流程首先,ZendEngine(Zend引擎),调用词法分析器(Lex生成的,源文件在Zend/zend_language_sanner.l),将我们要执行的PHP源文件,去掉空格,注释,分割成一个一个的token。然后,Zend引擎会将得到的tokenforward给语法分析器(yacc生成,源文件在Zend/zend_language_parser.y),生成一个一个的opcode,opcode一般会以oparray的形式存在,它是PHP执行的中间语言。最后,Zend引擎调用zend_executor来执行oparray,输出结果。Zend引擎是一个虚拟机,正是由于它的存在,所以才能使得我们写PHP脚本,完全不需要考虑所在的操作系统类型是什么。Zend引擎是一个CISC(复杂指令处理器),它支持150条指令(具体


php代码的执行过程 CPU的基本结构都是逻辑电路,所以指令的执行(取值,运算等)都是逻辑电路实现的。CPU只认得二进制的机器码,只能执行二进制的机器码的指令。但是全二进制的机器码不容易记忆也容易出错,所以厂家就把机器码翻译成对应的汇编指令,如上假设加法指令010就被翻译成ADD,就成了指令。所有这个CPU能够执行的指令放在一起就是指令集,称为汇编语言。汇编语言作为机器语言与程序设计者之间的一个层,在汇编语言之上还有一个层-C语言,C语言更贴近人类熟悉的“自然语言”,程序设计者可以通过C语言编译器将C源代码文件编译成目标文件(二进制文件,中间会先翻译成汇编语言,然后由汇编语言生成机器码),然后将各个目标文件连接在一起就组成了一个可执行文件。正如有人说过的一句名言“计算机科学领域的任何问题都可以通过增加一个间接的中间层来  决”(“Anyproblemincomputersciencecanbesolvedbyanotherlayerofindirection.”)PHP语言就是在C语言之上的一个层,PHP引擎是由C语言来实现的,因此PHP语言这一个在C之上抽象出来的层使用起来比C更简单方便。在php发展史中,PHP4.0之前都是被PHP解释器运行的。2000年5月新版PHP4.0发布,P


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值