日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

PHP內核了解:生命周期及運行模式

瀏覽:172日期:2022-09-11 17:31:54
PHP運行模式

1)CGI(通用網關接口 / Common Gateway Interface)2)FastCGI(常駐型CGI / Long-Live CGI)3)CLI(命令行運行 / Command Line Interface)4)Web模塊模式(Apache等Web服務器運行的模式)5)ISAPI(Internet Server Application Program Interface)備注:在PHP5.3以后,PHP不再有ISAPI模式

CGI是個協議,跟進程什么的沒關系。那fastcgi又是什么呢?Fastcgi是用來提高CGI程序性能的。

PHP中的CGI實現

PHP的CGI實現本質是是以socket編程實現一個TCP或UDP協議的服務器,當啟動時,創建TCP/UDP協議的服務器的socket監聽, 并接收相關請求進行處理。這只是請求的處理,在此基礎上添加模塊初始化,sapi初始化,模塊關閉,sapi關閉等就構成了整個CGI的生命周期。

PHP內核了解:生命周期及運行模式

CGI

CGI全稱是“通用網關接口”(Common Gateway Interface), 它可以讓一個客戶端,從網頁瀏覽器向執行在Web服務器上的程序請求數據。

CGI描述了客戶端和這個程序之間傳輸數據的一種標準。CGI的一個目的是要獨立于任何語言的,所以CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。如php,perl,tcl等

CGI已經是比較老的模式了,這幾年都很少用了。

每有一個用戶請求,都會先要創建CGI的子進程,然后處理請求,處理完后結束這個子進程,這就是Fork-And-Execute模式。 當用戶請求數量非常多時,會大量擠占系統的資源如內存,CPU時間等,造成效能低下。 所以用CGI方式的服務器有多少連接請求就會有多少CGI子進程,子進程反復加載是CGI性能低下的主要原因。

當web server收到/index.php這個請求后,會啟動對應的CGI程序,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執行環境,然后處理請求,再以規定CGI規定的格式返回處理后的結果,退出進程。web server再把結果返回給瀏覽器。

FastCGI

fast-cgi 是cgi的升級版本,FastCGI 像是一個常駐 (long-live) 型的 CGI,它可以一直執行著,只要激活后,不會每次都要花費時間去 fork 一次 (這是 CGI 最為人詬病的 fork-and-execute 模式)。

FastCGI工作原理Web Server啟動時載入FastCGI進程管理器【PHP的FastCGI進程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module) FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程 (可見多個php-cgi.exe或php-cig)并等待來自Web Server的連接; 當客戶端請求到達Web Server時,FastCGI進程管理器選擇并連接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi FastCGI子進程完成處理后將標準輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接著等待并處理來自FastCGI進程管理器(運行在 WebServer中)的下一個連接。 在正常的CGI模式中,php-cgi.exe在此便退出了。在CGI模式中,你可以想象 CGI通常有多慢。每一個Web請求PHP都必須重新解析php.ini、重新載入全部dll擴展并重初始化全部數據結構。使用FastCGI,所有這些都只在進程啟動時發生一次。一個額外的好處是,持續數據庫連接(Persistent database connection)可以工作。

備注:PHP的FastCGI進程管理器是PHP-FPM(PHP-FastCGI Process Manager)

優點從穩定性上看,FastCGI是以獨立的進程池來運行CGI,單獨一個進程死掉,系統可以很輕易的丟棄,然后重新分配新的進程來運行邏輯; 從安全性上看,FastCGI支持分布式運算。FastCGI和宿主的Server完全獨立,FastCGI怎么down也不會把Server搞垮; 從性能上看,FastCGI把動態邏輯的處理從Server中分離出來,大負荷的IO處理還是留給宿主Server,這樣宿主Server可以一心一意作IO,對于一個普通的動態網頁來說, 邏輯處理可能只有一小部分,大量的是圖片等靜態。不足

因為是多進程,所以比CGI多線程消耗更多的服務器內存,PHP-CGI解釋器每進程消耗7至25兆內存,將這個數字乘以50或100就是很大的內存數。

Nginx 0.8.46+PHP 5.2.14(FastCGI)服務器在3萬并發連接下,開啟的10個Nginx進程消耗150M內存(15M*10=150M),開啟的64個php-cgi進程消耗1280M內存(20M*64=1280M),加上系統自身消耗的內存,總共消耗不到2GB內存。如果服務器內存較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總內存數才500M。

上面的數據摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web服務器(第6版)

CLI

PHP-CLI是PHP Command Line Interface的簡稱,就是PHP在命令行運行的接口,區別于在Web服務器上運行的PHP環境(PHP-CGI,ISAPI等)。也就是說,PHP不單可以寫前臺網頁,它還可以用來寫后臺的程序。 PHP的CLI Shell腳本適用于所有的PHP優勢,使創建要么支持腳本或系統甚至與GUI應用程序的服務端,在Windows和Linux下都是支持PHP-CLI模式的。

我們在Linux下經常使用”php –m”查找PHP安裝了那些擴展就是PHP命令行運行模式;

PHP開始和結束階段

PHP開始執行以后會經過兩個主要的階段:處理請求之前的開始階段和請求之后的結束階段。

開始階段模塊初始化階段MINIT

在整個SAPI生命周期內(例如Apache啟動以后的整個生命周期內或者命令行程序整個執行過程中), 該過程只進行一次。

啟動Apache后,PHP解釋程序也隨之啟動;PHP調用各個擴展(模塊)的MINIT方法,從而使這些擴展切換到可用狀態。

PHP_MINIT_FUNCTION(myphpextension){ // 注冊常量或者類等初始化操作 return SUCCESS; }模塊激活階段RINIT

該過程發生在請求階段, 例如通過url請求某個頁面,則在每次請求之前都會進行模塊激活(RINIT請求開始)。請求到達之后,SAPI層將控制權交給PHP層,PHP初始化本次請求執行腳本所需的環境變量

例如是Session模塊的RINIT,如果在php.ini中啟用了Session 模塊,那在調用該模塊的RINIT時就會初始化$_SESSION變量,并將相關內容讀入; 然后PHP會調用所有模塊RINIT函數,即“請求初始化”。在這個階段各個模塊也可以執行一些相關的操作, 模塊的RINIT函數和MINIT函數類似 ,RINIT方法可以看作是一個準備過程,在程序執行之前就會自動啟動。

結束階段

請求處理完后就進入了結束階段, 一般腳本執行到末尾或者通過調用exit()或者die()函數,PHP都將進入結束階段. 和開始階段對應,結束階段也分為兩個環節,一個在請求結束后(RSHUWDOWN),一個在SAPI生命周期結束時(MSHUTDOWN).

請求結束后(RSHUWDOWN)

請求處理完后就進入了結束階段,PHP就會啟動清理程序。它會按順序調用各個模塊的RSHUTDOWN方法。RSHUTDOWN用以清除程序運行時產生的符號表,也就是對每個變量調用unset函數。

SAPI生命周期結束時(MSHUTDOWN)

最后,所有的請求都已處理完畢SAPI也準備關閉了PHP調用每個擴展的MSHUTDOWN方法這時各個模塊最后一次釋放內存的機會。(這個是對于CGI和CLI等SAPI,沒有“下一個請求”,所以SAPI立刻開始關閉。)

整個PHP生命周期就結束了。要注意的是,只有在服務器沒有請求的情況下才會執行“啟動第一步”和“關閉第二步”。

SAPI運行PHP都經過的幾個階段

模塊初始化階段(Module init)

即調用每個拓展源碼中的的PHP_MINIT_FUNCTION中的方法初始化模塊,進行一些模塊所需變量的申請,內存分配等。

請求初始化階段(Request init)

即接受到客戶端的請求后調用每個拓展的PHP_RINIT_FUNCTION中的方法,初始化PHP腳本的執行環境。執行PHP腳本

請求結束(Request Shutdown)

這時候調用每個拓展的PHP_RSHUTDOWN_FUNCTION方法清理請求現場,并且ZE開始回收變量和內存

關閉模塊(Module shutdown)

Web服務器退出或者命令行腳本執行完畢退出會調用拓展源碼中的PHP_MSHUTDOWN_FUNCTION 方法單進程SAPI生命周期

CLI/CGI模式的PHP屬于單進程的SAPI模式。這類的請求在處理一次請求后就關閉。也就是只會經過如下幾個環節: 開始 - 請求開始 - 請求關閉 - 結束 SAPI接口實現就完成了其生命周期。

PHP內核了解:生命周期及運行模式

多進程SAPI生命周期通常PHP是編譯為apache的一個模塊來處理PHP請求。 Apache一般會采用多進程模式, Apache啟動后會fork出多個子進程,每個進程的內存空間獨立,每個子進程都會經過開始和結束環節 每個進程的開始階段只在進程fork出來以來后進行,在整個進程的生命周期內可能會處理多個請求。 只有在Apache關閉或者進程被結束之后才會進行關閉階段,在這兩個階段之間會隨著每個請求重復請求開始-請求關閉的環節。PHP內核了解:生命周期及運行模式 多線程的SAPI生命周期

多線程模式和多進程中的某個進程類似,不同的是在整個進程的生命周期內會并行的重復著 請求開始-請求關閉的環節.

在這種模式下,只有一個服務器進程在運行著,但會同時運行很多線程,這樣可以減少一些資源開銷,向Module init和Module shutdown就只需要運行一遍就行了,一些全局變量也只需要初始化一次,因為線程獨具的特質,使得各個請求之間方便的共享一些數據成為可能。PHP內核了解:生命周期及運行模式

參考資料:http://www.phppan.com/2011/05/php-cgi/http://www.php-internals.com/book/?p=chapt02/02-01-php-life-cycle-and-zend-engine

標簽: PHP
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品极品少妇16p| 99香蕉国产精品偷在线观看| 日韩成人午夜精品| 国产精品夜夜夜| а√天堂8资源在线| 在线一区免费| 日韩激情精品| 精品成av人一区二区三区| 久久精品av| 丝袜脚交一区二区| 青青国产91久久久久久| 精品99在线| 亚洲色诱最新| 麻豆精品国产91久久久久久| 久久久久一区| 亚洲精品福利| 97精品国产一区二区三区| 91久久黄色| 国产精品白浆| 波多野结衣一区| 欧美欧美黄在线二区| 日韩在线不卡| 91嫩草精品| 欧美精品一区二区久久| 国产另类在线| 尤物在线精品| 国产成人免费av一区二区午夜| 国产视频一区免费看| 久久字幕精品一区| 亚洲欧美日韩一区在线观看| 国产精品啊v在线| 久久精品国产久精国产爱| 一区在线免费观看| 精品资源在线| 亚洲一区二区av| 国产一区久久| 水蜜桃久久夜色精品一区| 欧美日韩视频| 欧美偷窥清纯综合图区| 国产美女高潮在线| 蜜臀a∨国产成人精品| 久久香蕉网站| 亚洲中字黄色| 精品国产亚洲一区二区三区| 99热精品在线观看| 国产精品草草| 91九色精品| 日韩激情综合| 亚洲精品88| 亚洲+小说+欧美+激情+另类| 国际精品欧美精品| 首页亚洲欧美制服丝腿| 亚洲天堂成人| 国产另类在线| 中文字幕亚洲精品乱码| 一区二区三区视频免费观看| 精品国产三区在线| 国产亚洲一卡2卡3卡4卡新区| 欧美日韩视频| 91精品久久久久久久久久不卡| 精品一区二区三区在线观看视频| 亚洲一区二区三区高清| 99国产精品久久久久久久| 青草综合视频| 精品国产乱码久久久久久樱花 | 激情久久久久久久| 欧美欧美黄在线二区| 亚洲夜间福利| 日韩精品电影一区亚洲| 亚洲毛片一区| 天堂日韩电影| 日本一区二区免费高清| 久久99偷拍| 日av在线不卡| 亚洲免费在线| bbw在线视频| 亚洲永久精品唐人导航网址| 秋霞国产精品| 日韩午夜电影| 亚洲日本在线观看视频| 天堂va蜜桃一区二区三区| aⅴ色国产欧美| 国产综合精品| 激情视频一区二区三区| 91精品亚洲| 精品在线99| 免费观看久久av| 精品一区三区| 五月天久久久| 精品五月天堂| 91精品丝袜国产高跟在线| 91久久在线| 99国产精品一区二区| 丁香婷婷久久| 欧美激情三区| 日韩黄色在线观看| 久久精品99久久久| 久久精品凹凸全集| 久久爱www成人| 国产不卡av一区二区| 成人午夜亚洲| 999国产精品视频| 日韩午夜高潮| 男女男精品视频网| 亚洲精品黄色| 国产亚洲精品美女久久| 国产私拍福利精品视频二区| 欧美激情在线精品一区二区三区| 精品久久久久中文字幕小说| 欧美少妇精品| 黄色精品网站| 亚洲精品系列| 国产精品伦一区二区| 精品久久中文| 久久久久网站| 蜜桃一区二区三区在线| 91综合久久爱com| 精品国产午夜| 欧美日韩精品在线一区| 亚洲免费黄色| 中文字幕日韩亚洲| 日韩精品免费视频人成| 国产精品久久久久久久久久齐齐| 日韩av电影一区| 日本成人中文字幕| 欧美亚洲一级| 国产精品亲子伦av一区二区三区| 国产日产精品_国产精品毛片 | 欧美日韩精品免费观看视频完整| 久久一区二区中文字幕| 中文字幕在线看片| 欧美二三四区| 欧美日韩精品免费观看视频完整| 国产免费成人| 婷婷久久免费视频| 国产欧美日韩精品一区二区三区| 久久久91麻豆精品国产一区| 中国字幕a在线看韩国电影| 日韩电影二区| 亚洲性图久久| 亚洲在线免费| 亚洲欧洲av| 国产精品一国产精品k频道56| 精品一区91| 久久高清精品| 六月婷婷一区| 国产乱子精品一区二区在线观看 | 国产精品高清一区二区| 久久精品三级| 日韩综合在线| 视频一区二区欧美| 日韩一级不卡| 久久av影视| 久久国产精品久久久久久电车| 久久精品国产99国产| 国产女优一区| 成人在线超碰| 日韩精品亚洲专区| 日本久久成人网| 国产亚洲电影| 一区二区自拍| 精品国产乱码久久久久久1区2匹| 久久国产福利| 天堂av在线| 一级成人国产| 98精品久久久久久久| 婷婷成人av| 久久精品官网| 国产精品扒开腿做爽爽爽软件| 99在线精品免费视频九九视 | 欧美偷窥清纯综合图区| 国产一区日韩欧美| 久久精品亚洲| 亚州av一区| 欧美成人亚洲| 国产一区二区三区天码| 亚洲一区日本| 欧美二三四区| 国产精品麻豆成人av电影艾秋 | 精品一区亚洲| 国产一区二区亚洲| 日本在线不卡视频一二三区| 亚洲不卡av不卡一区二区| 久久福利在线| 日韩亚洲精品在线观看| 精品一区欧美| xxxxx性欧美特大| 国产精品亚洲二区| 999在线观看精品免费不卡网站| 成人精品久久| 国产精品久久久久久模特| 蜜臀91精品一区二区三区| 久久九九精品| 国产成人精品亚洲线观看| 国产探花一区| 蜜桃视频一区二区三区在线观看| 久久狠狠婷婷| 国产成人精品一区二区三区视频| 欧美日韩一区二区国产| 亚洲青青久久|