以前看优化php的时候知道是怎么弄的,时间一长了又忘记apc和opcache什么关系了
后来自己也忘记为什么要同时这两个一起用了。。
今天想起来了又翻了出来
apc和zendopcache什么区别
-
在以前, 很多人都会选择使用APC, APC除了提供Opcode Cache以外, 还会提供一套User Data Cache(apc_store/apc_fetch), 所以对于很多有需求使用User Data Cache的同学, 使用APC, 就没什么问题.
-
-
然而, 最近Zend Optimizer Plus开源了, 测试表明, Zend O+在Opcode Cache方面, 因为做了Opcode Cache优化, 所以会比APC要高效, 再后来, PHP5.5已经把Zend O+作为了源代码的一部分. 会随着PHP一起发布.
-
-
这就有了个问题, 对于那些既要使用Zend O+的Opcode Cache, 又要使用APC的User Data Cache的同学, 怎么办呢?
-
-
开始的时候, 我只是给APC增加了一个开关apc.opcode_cache_enable, 这样一来, 用户就可以使用APC然而关闭opcode cache来达到这个目的, 但是APC的User Data Cache使用的存储机制是和Opcode Cache一样的, 这样的场景要求数据严格正确, 所以锁会比较多, 测试表明, APC的User Data Cache的效率和本地memcached几乎相当.
什么是opcode
-
opcode是计算机指令中的一部分,用于指定要执行的操作, 指令的格式和规范由处理器的指令规范指定。 除了指令本身以外通常还有指令所需要的操作数,可能有的指令不需要显式的操作数。 这些操作数可能是寄存器中的值,堆栈中的值,某块内存的值或者IO端口中的值等等。
-
-
通常opcode还有另一种称谓:字节码(byte codes)。 例如Java虚拟机(JVM),.NET的通用中间语言(CIL: Common Intermeditate Language)等等。
-
-
PHP中的opcode则属于前面介绍中的后着,PHP是构建在Zend虚拟机(Zend VM)之上的。PHP的opcode就是Zend虚拟机中的指令。
简单来说
apc和zendopcache都能做opcode cache,但是zendopcache的效率比apc高,所以能用zendopcache做opcode cache就用zendopcache
但是apc提供额外的User Data Cache,而zendopcache不提供,为了这两个一起用不冲突,关闭掉apc的opcode cache功能就能一起用了
所以apc里设置apc.enable_opcode_cache=0就能和zendopcache一起用了
这个User Data Cache又是啥呢,应该就是类似静态变量之类的吧
因为PHP像有守护进程的JAVA之类的语言,没有真正的静态变量,当需要类型静态变量的时候,
比如说游戏服务器ID,ip之类的很少更新的信息估计都能存这里面,免去反复读取数据库。
另外apc在5.5的时候已经去掉opcode cache功能并改名为apcu,意思是只提供user cache了,不过5.5还有能用apc的一个补丁过得版本。
在php5.6里需要直接用apcu了,没人在补丁apc给php5.6了
阅读(1737) | 评论(0) | 转发(0) |