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