PHP的執行機制

2021-06-27 12:47:32 字數 613 閱讀 4491

php和python/ruby的執行機制有乙個本質區別:php是每次http請求過來以後,初始化全部資源(例如建立資料庫鏈結、載入系統類庫,建立快取等等),處理完畢,釋放全部資源,這不像python/ruby之類帶有gc的指令碼語言,python/ruby是初次啟動的時候初始化資源,隨後的請求就不必再次初始化資源了。 

這種機制的差異帶來的區別就是: 

1、php極難出現嚴重的記憶體洩露問題,隨便你**寫的多爛,反正每個請求一執行完畢,所有資源統統釋放光。而python/ruby則需要依賴gc來**記憶體,因此稍有不慎,還是會出現gc無法釋放的記憶體洩露問題。 

2、php每次請求都要初始化資源,這個開銷非常大。所以儘管php解析器本身的執行速度是極快的,但是一旦使用複雜的php框架,那麼由於需要每次請求的時候初始化整個框架,效能的下降非常厲害,你用乙個很複雜的php框架的結果就是整體效能被ruby遠遠甩開。這也是為什麼php社群這麼多年來,並不怎麼傾向於使用框架的原因之一。 

3、由於php這種每請求初始化資源的機制,也造成了php新增跨請求的高階特性相當困難,這是php本身乙個很大的限制,但是反過來說,正是這種限制使得php始終保持在乙個比較簡單的web語言上面,而正是這一點才是php得以成為網際網路第一web程式語言的原因,因此也未必就不好。

理解PHP的執行機制

php是一種純解釋型在服務端執行的可以內嵌html的指令碼語言,尤其適合開發web應用程式。請求乙個 php 指令碼時,php 會讀取該指令碼,並將其編譯為 zend 操作碼,這是要執行的 的一種二進位制表示形式。隨後,此操作碼由 php 執行並丟棄。php指令碼在每次被解釋時進行初始化,在解釋完畢...

PHP之執行機制與原理

php通過sapi與apache相連。php總共有三大模組 核心 處理網路請求 檔案流 錯誤處理等相關操作 zend引擎 將原始檔轉化成機器語言後在虛擬機器上執行它,虛擬機器就是zend引擎,簡稱ze 拓展層 函式 類庫 流 當ze執行程式時可能會需要連線多個拓展層,這時ze將控制權交給拓展,等待處...

PHP和Python Ruby執行機制的本質區別

php和python ruby的執行機制有乙個本質區別 php是每次http請求過來以後,初始化全部資源 例如建立資料庫鏈結 載入系統類庫,建立快取等等 處理完畢,釋放全部資源,這不像python ruby之類帶有gc的指令碼語言,python ruby是初次啟動的時候初始化資源,隨後的請求就不必再...