1.緣起
關於PHP,很多人的直觀感覺是PHP是一種靈活的腳本語言,庫類豐富,使用簡單,安全,非常適合WEB開發,但性能低下。PHP的性能是 否真的就如同大家的感覺一樣的差呢?本文就是圍繞這麼一個話題來進行探討的。從源碼、應用場景、基准性能、對比分析等幾個方面深 入分析PHP之性能問題,並通過真實的數據來說話。
2.從原理分析PHP性能
從原理分析PHP的性能,主要從以下幾個方面:內存管理、變量、函數、運行機制來進行分析。
2.1內存管理
類似Nginx的內存管理方式,PHP在內部也是基於內存池,並且引入內存池的生命周期概念。在內存池方面,PHP對PHP腳本和擴展的所有 內存相關操作都進行了托管。對大內存和小內存的管理采用了不同的實現方式和優化,具體可以參考以下文檔: https://wiki.php.net/internals/zend_mm。在內存分配和回收的生命周期內,PHP采用一次初始化申請+動態擴容+內存標識回收機制,並 且在每次請求結束後直接對內存池進行重新mask。
2.2變量
總所周知,PHP是一種弱變量類型的語言,所以在PHP內部,所有的PHP變量都對應成一種類型Zval,其中具體定義如下:
圖一PHP變量
在變量方面,PHP做了大量的優化工作,比如說Reference counting和copy on writer機制。這樣能夠保證內存使用上的優化,並且減 少內存拷貝次數(請參考http://blog.xiuwz.com/2011/11/09 /php-using-internal-zval/)。在數組方面,PHP內部采用高效的 hashtable來實現。