Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1125561
  • 博文数量: 170
  • 博客积分: 1603
  • 博客等级: 上尉
  • 技术积分: 1897
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 15:54
文章分类

全部博文(170)

文章存档

2016年(27)

2015年(21)

2014年(27)

2013年(21)

2012年(7)

2011年(67)

我的朋友

分类: 系统运维

2015-02-26 19:35:05

以前看优化php的时候知道是怎么弄的,时间一长了又忘记apc和opcache什么关系了
后来自己也忘记为什么要同时这两个一起用了。。
今天想起来了又翻了出来

apc和zendopcache什么区别

点击(此处)折叠或打开

  1. 在以前, 很多人都会选择使用APC, APC除了提供Opcode Cache以外, 还会提供一套User Data Cache(apc_store/apc_fetch), 所以对于很多有需求使用User Data Cache的同学, 使用APC, 就没什么问题.
  2. 然而, 最近Zend Optimizer Plus开源了, 测试表明, Zend O+在Opcode Cache方面, 因为做了Opcode Cache优化, 所以会比APC要高效, 再后来, PHP5.5已经把Zend O+作为了源代码的一部分. 会随着PHP一起发布.
  3. 这就有了个问题, 对于那些既要使用Zend O+的Opcode Cache, 又要使用APC的User Data Cache的同学, 怎么办呢?
  4. 开始的时候, 我只是给APC增加了一个开关apc.opcode_cache_enable, 这样一来, 用户就可以使用APC然而关闭opcode cache来达到这个目的, 但是APC的User Data Cache使用的存储机制是和Opcode Cache一样的, 这样的场景要求数据严格正确, 所以锁会比较多, 测试表明, APC的User Data Cache的效率和本地memcached几乎相当.

什么是opcode

点击(此处)折叠或打开

  1. opcode是计算机指令中的一部分,用于指定要执行的操作, 指令的格式和规范由处理器的指令规范指定。 除了指令本身以外通常还有指令所需要的操作数,可能有的指令不需要显式的操作数。 这些操作数可能是寄存器中的值,堆栈中的值,某块内存的值或者IO端口中的值等等。
  2. 通常opcode还有另一种称谓:字节码(byte codes)。 例如Java虚拟机(JVM),.NET的通用中间语言(CIL: Common Intermeditate Language)等等。
  3. 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) |
给主人留下些什么吧!~~