问一个问题
opcache的缓存模式 和 workerman守护进程模式
是不是一样的效果 同样都是把php缓存在内存中运行,性能上差距大么?
原理不太一样,性能上比opcache要好很多。
一般带opcode缓存的php请求过程有以下步骤: 1、zend创建执行环境 2、调用各个模块的的RINIT函数 例如session模块、mysql、json等等一堆 3、从共享内存中获取opcode缓存并运行 《==== 4、运行过程中创建PHP运行过程中变量名称和值内容的符号表 5、运行过程中创建当前所有的函数以及类等信息的符号表 6、运行完毕清理所有的函数以及类等信息的符号表 7、运行完毕清理PHP运行过程中变量名称和值内容的符号表 8、运行完毕调用所有模块的RSHUTDOWN函数 例如session模块、mysql、json等等一堆
而workerman在处理一个php请求时一般只有 4、运行过程中创建PHP运行过程中变量名称和值内容的符号表
workerman没有重复的环境包括函数类符号表的创建销毁过程(这也就是为什么workerman可以永久保存全局对象或者资源),没有各个模块重复的RINIT RSHUTDOWN,更不用去共享内存中获取opcodes缓存。所以workerman运行飞快,比传统的apc类的opcode缓存要快很多。
原理不太一样,性能上比opcache要好很多。
一般带opcode缓存的php请求过程有以下步骤:
1、zend创建执行环境
2、调用各个模块的的RINIT函数 例如session模块、mysql、json等等一堆
3、从共享内存中获取opcode缓存并运行 《====
4、运行过程中创建PHP运行过程中变量名称和值内容的符号表
5、运行过程中创建当前所有的函数以及类等信息的符号表
6、运行完毕清理所有的函数以及类等信息的符号表
7、运行完毕清理PHP运行过程中变量名称和值内容的符号表
8、运行完毕调用所有模块的RSHUTDOWN函数 例如session模块、mysql、json等等一堆
而workerman在处理一个php请求时一般只有
4、运行过程中创建PHP运行过程中变量名称和值内容的符号表
workerman没有重复的环境包括函数类符号表的创建销毁过程(这也就是为什么workerman可以永久保存全局对象或者资源),没有各个模块重复的RINIT RSHUTDOWN,更不用去共享内存中获取opcodes缓存。所以workerman运行飞快,比传统的apc类的opcode缓存要快很多。