PHP生命周期及fpm(FastCGI進程管理器)的運作方式

PHP在web方式中如何改了文件就立即生效的,重要的幾個概念:

  • sapi: 可以簡單的理解為php引擎對外的一個統一接口,使得php可以和外部程序進行交互
  • php的生命周期中關鍵四個調用: MINT -> RINT -> RSHUTDOWN -> MSHUTDOWN
  • fpm: fastcgi進程管理器

fpm方式的流程就是:

fpm通過sapi接口與php進程交互

1.fpm啟動會調用各擴展的MINT方法,進行一些數據初始化(長駐內存)
2.每個請求過來,先會執行RINT對單個請求行一個初始化
3.執行php腳本(在沒有緩存opcode的情況下,這里的php腳本是動態執行的,所以更新php腳本后,會執行新的php腳本,詳情不在這里敘述)
4.執行RSHUTDOWN方法
5.如果你要停止fpm了,才會執行MSHUTDOWN

fpm對每個請求的處理都是一直在在重復執行 2~4步,在第三步中,php的腳本是動態執行的,由于每次都要執行一次php腳本,而每次php腳本都要有一個把php文件翻譯成opcode的流程(比較耗時), 于是就產生的opcache工具。

opcache

直接把php翻譯后的opcode代碼樹保存到共享內存中,以便直接使用,從而減少每次都把php翻譯成opcode的開銷。

opcache的問題: 按照他的描述,修改了php文件,并不能立即被更新。
opcache的解決方案: 有一個配置來設置隔多長時間檢測文件是否更新了,從而有機會在第二步重新來reload相關的文件。
當然,直接reload fpm,從而達到php熱更新的效果(opcache擴展可以在第四步把相關的opcode cache給清空)。

圖示

PHP生命周期及fpm(FastCGI進程管理器)的運作放式.png

本文參考自swoole之代碼熱更新實現PHP擴展開發相關內核概念

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容