問一個(gè)問題
opcache的緩存模式
和
workerman守護(hù)進(jìn)程模式
是不是一樣的效果
同樣都是把php緩存在內(nèi)存中運(yùn)行,性能上差距大么?
原理不太一樣,性能上比opcache要好很多。
一般帶opcode緩存的php請求過程有以下步驟:
1、zend創(chuàng)建執(zhí)行環(huán)境
2、調(diào)用各個(gè)模塊的的RINIT函數(shù) 例如session模塊、mysql、json等等一堆
3、從共享內(nèi)存中獲取opcode緩存并運(yùn)行 《====
4、運(yùn)行過程中創(chuàng)建PHP運(yùn)行過程中變量名稱和值內(nèi)容的符號(hào)表
5、運(yùn)行過程中創(chuàng)建當(dāng)前所有的函數(shù)以及類等信息的符號(hào)表
6、運(yùn)行完畢清理所有的函數(shù)以及類等信息的符號(hào)表
7、運(yùn)行完畢清理PHP運(yùn)行過程中變量名稱和值內(nèi)容的符號(hào)表
8、運(yùn)行完畢調(diào)用所有模塊的RSHUTDOWN函數(shù) 例如session模塊、mysql、json等等一堆
而workerman在處理一個(gè)php請求時(shí)一般只有
4、運(yùn)行過程中創(chuàng)建PHP運(yùn)行過程中變量名稱和值內(nèi)容的符號(hào)表
workerman沒有重復(fù)的環(huán)境包括函數(shù)類符號(hào)表的創(chuàng)建銷毀過程(這也就是為什么workerman可以永久保存全局對象或者資源),沒有各個(gè)模塊重復(fù)的RINIT RSHUTDOWN,更不用去共享內(nèi)存中獲取opcodes緩存。所以workerman運(yùn)行飛快,比傳統(tǒng)的apc類的opcode緩存要快很多。