1.
只有控制器 和 啟動腳本中 載入的文件(比如,process,composer包),才是常駐內(nèi)存的
我們自己寫的業(yè)務代碼,比如,在某個方法里,直接 new 的,這種都不是常駐內(nèi)存的吧
因為遵循PHP垃圾回收機制
2.
如果僅僅只比較業(yè)務代碼,是不是跟fpm中,性能差不多的呢?
public function xxx(){
全部變量到}執(zhí)行完畢回收,
}
據(jù)我個人看法,常駐內(nèi)存確實會比fpm快,但是真正是在于epoll 事件回調(diào) 才是性能大幅度提升的關鍵。
http://www.wtbis.cn/a/1328
如果業(yè)務上有使用數(shù)據(jù)庫,也不需要每次都tcp連接,(其實就是fpm下的opencache)
只談http應用的話,fpm一樣支持epoll(fpm配置項events.mechanism = epoll),多路復用技術(shù)是用在套接字連接上的,workerman本質(zhì)上就是一個fpm,workerman相比fpm代碼常駐內(nèi)存,少了各種初始化編譯過程,再就是因為代碼常駐內(nèi)存,全局和靜態(tài)變量持久保存,可以復用數(shù)據(jù)類的連接。(以上純屬個人最近閱讀unix網(wǎng)絡編程之后的理解)
FPM在linux kernel > 2.5.44的時候,默認值不設置會自動使用epoll, 但是fpm只有master進程是epoll, worker進程依舊是poll
workerman本質(zhì)是一個fpm這個也有一點不妥, fpm是一個實現(xiàn)了fastcgi協(xié)議并用解析的應用, 而workerman走的是php-cli進行解析
fastcgi是fpm和nginx之類的web服務器之間傳輸數(shù)據(jù)使用的協(xié)議,fpm跟wokerman一樣,master進程只負責監(jiān)控子進程,實際都是子進程負責接受套接字連接并處理業(yè)務邏輯,fpm子進程執(zhí)行(exec)php代碼
FPM每次請求創(chuàng)建線程->加載文件->銷毀線程
WM啟動一次后續(xù)請求無需再進行加載
不要把WM當成一個Web框架,實際上它算是個應用服務器,是跟NGINX一個層面的東西
如果把Workerman比作nginx,那webman可以算是php-ngx
關于webman生命周期參考文檔
http://www.wtbis.cn/doc/webman/others/lifecycle.html
關于webman性能參考文檔
http://www.wtbis.cn/doc/webman/others/performance.html