php和apache工作原理?


1、CGI和FastCGI是apache處理php腳本的其中兩種工作模式,還有ISAPI,SAPI等

2、而php-fpm並不是一種工作模式,而是一個PHP在FastCGI模式運行下的進程管理器,全稱為 PHP: FastCGI Process Manager

3、怎么工作的是看你搭建環境的時候使用哪一種工作模式來處理php腳本,當然,少不了的還有你的apache配置(連接數,進程數,線程數等),還有就是所使用的操作系統(不同操作系統對於進程和線程的支持不同,處理能力也不同)。

首先說系統層面吧,不同系統默認會使用不同的多處理模塊(MPM),如下:

BeOS beos
Netware mpm_netware
OS/2 mpmt_os2
Unix prefork
Windows mpm_winnt

可以使用apachectl -l 命令來查看當前系統使用哪一種MPM配置。

主要的區別是不同系統使用不同的配置,對於配置項的支持程度也不同。

一般包含以下這些配置項:

# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves

等等。。。。。。

 

然后就是apache層面的東西了,

看上面的說明,什么最大連接數啊,每個進程有多少個線程啊,每個進程處理多少個請求什么的,都是可以配置的。怎么處理其中一部分取決於你的配置的值。

 

然后就是php運行模式的層面了,

現在主流的運行模式是FastCGI,當然有很多以前的配置好的服務器會使用其他模式,具體用命令看一下或者看apache的配置文件就知道了。下面直接貼一段我以前mark下來的內容吧:

    1、CGI(通用網關接口/Common Gateway Interface)一般是可執行程序,例如EXE文件,和WEB服務器各自占據着不同的進程,而且一般一個CGI程序只能處理一個用戶請求。這樣,當用 戶請求數量非常多時,會大量占用系統的資源,如內存、CPU時間等,造成效能低下。
    2、ISAPI(Internet Server Application Program Interface)是微軟提供的一套面向WEB服務的API接口,它能實現CGI提供的全部功能,並在此基礎上進行了擴展,如提供了過濾器應用程序接 口。ISAPI應用大多數以DLL動態庫的形式使用,可以在被用戶請求后執行,在處理完一個用戶請求后不會馬上消失,而是繼續駐留在內存中等待處理別的 用戶輸入。此外,ISAPI的DLL應用程序和WEB服務器處於同一個進程中,效率要顯著高於CGI。
    3、FastCGI是可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中並因此獲得較高的性能。傳統的CGI解釋器的反復加載是 CGI性能低下的主要原因,如果CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性等。
 
以 ISAPI 模式運行 PHP 的,這種方式最大的缺點就是穩定性不好,當 PHP 出錯的時候,Apache進程也死掉。
 
FastCGI 模式運行 PHP 的優點:
首先就是 PHP 出錯的時候不會搞垮 Apache,只是 PHP 自己的進程當掉(但 FastCGI 會立即重新啟動一個新 PHP 進程來代替當掉的進程)。
其次 FastCGI 模式運行 PHP 比 ISAPI 模式性能更好
最后,就是可以同時運行 PHP5 和 PHP4
 
綜合系統層面,apache配置層面,PHP工作模式層面來說,1000個請求是絕對不用1000個進程的,很可能只需要兩位數甚至更少的進程就能處理掉了。
 
大部分手工碼字,請LZ笑納。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM