PHP 5大運行模式
做 php 開發的應該都知道 php 運行模式概念吧,本文將要和大家分享的是關於php目前比較常見的五大運行模式:包括cgi 、fast-cgi、cli、isapi、apache模塊的DLL ,下麵作者就這五大運行模式做一些自己的分析,有不對的地方,還請留言指正。
CGI運行模式
CGI即通用網關接口(Common Gateway Interface),它是一段程序,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序連接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。CGI 的跨平台性能極佳,幾乎可以在任何操作係統上實現。
CGI方式在遇到連接請求(用戶 請求)先要創建cgi的子進程,激活一個CGI進程,然後處理請求,處理完後結束這個子進程。這就是fork-and-execute模式。所以用cgi方式的服務器有多少連接請求就會有多少cgi子進程,子進程反複加載是cgi性能低下的主要原因。都會當用戶請求數量非常多時,會大量擠占係統的資源如內 存,CPU時間等,造成效能低下。
Fast-CGI運行模式
fast-cgi 是cgi的升級版本,FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,隻要激活後,不會每次都要花費時間去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全稱PHP FastCGI進程管理器進行管理。
FastCGI的工作原理
1、Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
2、FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的連接。
3、當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
4、 FastCGI子進程完成處理後將標準輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出了。
在上述情況中,你可以想象CGI通常有多慢。每一個Web請求PHP都必須重新解析php.ini、重新載入全部擴展並重初始化全部數據結構。使用FastCGI,所有這些都隻在進程啟動時發生一次。一個額外的 好處是,持續數據庫連接(Persistent database connection)可以工作。
cli運行模式
cli是php的命令行運行模式,大家經常會使用它,但是可能並沒有注意到(例如:我們在linux下經常使用 “php -m”查找PHP安裝了那些擴展就是PHP命令行運行模式;有興趣的同學可以輸入php -h去深入研究該運行模式)
ISAPI運行模式
ISAPI即Internet Server Application Program Interface,是微軟提供的一套麵向Internet服務的API接口,一個ISAPI的DLL,可以在被用戶請求激活後長駐內存,等待用戶的另一個請求,還可以在一個DLL裏設置多個用戶請求處理函數,此外,ISAPI的DLL應用程序和WWW服務器處於同一個進程中,效率要顯著高於CGI。(由於微軟的排他性,隻能運行於windows環境)
APACHE2HANDLER
PHP作為Apache模塊,Apache服務器在係統啟動後,預先生成多個進程副本駐留在內存中,一旦有請求出現,就立即使用這些空餘的子進程進行處理,這樣就不存在生成子進程造成的延遲了。這些服務器副本在處理完一次HTTP請求之後並不立即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反應更快,性能較高。
apache模塊的DLL運行模式
此運行模式是我們以前在windows環境下使用apache服務器經常使用的,而在模塊化(DLL)中,PHP是與Web服務器一起啟動並運行的。(是apache在CGI的基礎上進行的一種擴展,加快PHP的運行效率)
對於以上每種運行模式都有自己的優缺點,沒有絕對的好與壞,主要是看大家在什麼環境下麵有什麼樣的需求了。
明星效應。很簡單,在一個領域保持頂尖水平,比在一兩個領域保持領先水平和五六個領域保持一般水準都要更有價值、並且收益更好。 有悖常識的真相:讓未來更開放的方式,正是專注的去做好一件事情。這個世界上最成功的人,他們在某一領域獲得成功之後,可通過經營杠杆進入任何他們想要涉足的領域。而這都得依賴於他們曾極致的專注在做好一件事情上。
最後更新:2017-06-10 12:32:55
上一篇:
阿裏雲發布ET環境大腦 對抗霧霾、排汙和自然災害
下一篇:
阿裏雲發布移動數據中心“閃電立方”:為PB級海量數據遷移而生
Android 實時視頻采集—Cameara預覽采集
ubuntu和mac OS X下另一種使用QQ的方法
httpclient通過POST來上傳文件,而不是通過流的形式,並在服務端進行解析(通過httpmime.jar來操作)
lua與C(一):C調用lua
阿裏雲雙11訪談之數據智能
為什麼你的Web前端工作經驗不值錢?
error: ‘exit’ was not declared in this scope 的解決方法
模擬使用Flume監聽日誌變化,並且把增量的日誌文件寫入到hdfs中
從洞穴壁畫說起,信息可視化圖表發展的迷人曆史
Dissecting the Disruptor: How do I read from the ring buffer?