2016-9-24
1 代码执行过程
对于C,C++等语言,经过编译器编译成计算机可以识别的语言(二进制)去执行。
对于JAVA语言,编译成class文件(能够持久的存在硬盘上),然后由java虚拟机(jvm)执行,因为jvm是跨平台的,所以java才能跨平台。
对于PHP语言而言,虽然是脚本语言,但是也需要进行编译
浏览器去请求.php文件-->web服务器去硬盘上读取相应的代码(产生io,快点用SSD),程序的执行都是在内存中执行-->读取代码进入内存,分配CPU资源-->
这时候调用phpzend解析器(1.检查php语法是否有错,2由zend引擎编译成opcode。3zend引擎执行opcode)。
与java不同的是,java编译的.class文件可以持久的存在硬盘上,而opcode是保存在内存中的,程序执行结束就会回收内存,opcode就会被清理,下次就算执行相同的代码,也还是得重新的编译一次。其实php能够跨平台也是和zend引擎能够跨平台有关系。
对于提高性能,如果并发量很大的话,执行相同的代码,每次都要去语法检查,编译成opcode,会浪费掉大量的资源,所以能不能想办法把opcode缓存住呢,下次执行相同的代码就可以直接执行了,大大提高了速度。
PS:php本身是不支持去缓存opcode的,但是可以借助第三方的工具,如APC,XCACHE等缓存opcode.