mod_fastcgi和mod_fcgid的區別
mod_fcgid是一個跟mod_fastcgi二進位制相容的Apache module。
原來的mod_fastcgi因為實現方式的限制,所以可能會建立了很多不必要的程式,而實際上只需要更少的程式就能處理同樣的請求。 mod_fastcgi的另外一個問題是每一個CGI的多個程式都共享同一個管道檔案,所有到同一個fastcgi的通訊都通過這個同名的管道檔案進行, 這樣當出現通訊錯誤的時候,根本不知道正在通訊的是哪一個fastcgi,於是也沒有辦法將這個有問題的程式殺死。
mod_fcgid嘗試使用共享記憶體來解決這個問題。共享記憶體裡面有當前每個fastcgi程式的資訊(包括程式號,程式使用的管道檔名等),當 每次嘗試請求fastcgi工作的時候,Apache將會首先在共享記憶體裡面查詢,只有在共享記憶體裡面發現確實沒有足夠的fastcgi程式了,才會建立 新的程式,這樣可以保證當前建立的程式數量剛好能夠處理客戶的請求。另外,由於每一個fastcgi程式使用不同名稱的管道檔案,所以可以在通訊失敗的時 候知道到底哪個fastcgi程式有問題,而能夠儘早的將其剔除。
程式實現的目標
跟mod_fastcgi二進位制相容
只要在Apache中用mod_fcgid替換了mod_fastcgi,就能工作。原來的fastcgi程式不用重新編譯,立即可以工作。
更嚴格的控制程式的建立
Apache中每一個request handler都能通過共享記憶體知道當前系統fastcgi執行的情況,這樣可以防止過度的建立fastcgi程式,無謂的消耗系統的資源。
簡單清晰的程式建立速度控制策略
每一個fastcgi都會維護一個計數器,這個計數器在程式建立和程式結束的時候都會增加,而這個計數器每秒會減1,直到0。當計數器的值高於某個 閥值的時候,程式就會停止建立,直到計數器的值回落。這樣既可以保證在請求突然增多的時候能夠快速反應(特別是Apache剛啟動,需要大量建立程式的時 候),也能保證當fastcgi程式有問題,不斷重起的時候,重起的速度不會過高而消耗過多的系統資源。
自動檢測出有問題的程式
因為每個fastcgi使用自己特定的管道檔案,所以在通訊錯誤的時候可以輕易知道哪一個程式出現問題,而儘早的將其剔除。
可移植性
遵照Apache2的習慣,所有可移植的程式碼都放到一起,所有不可移植的程式碼都在arch目錄下分開存放。當前已經測試過的系統包括 Linux , FreeBSD(已經包含入FreeBSD4和FreeBSD5的port中), Solaris, Windows 2000.
支援FastCGI方式執行的PHP
可以直接支援以FastCGI方式執行的PHP。因為PHP現在還不能保證所有的擴充套件程式碼都是執行緒安全的,所以並不建議在Apache2的執行緒模式 下使用mod_php。而以FastCGI方式執行的PHP則是其中一個解決辦法。另外,使用mod_fcgi還可以在不修改任何PHP程式碼的情況下,獲 得資料庫連線池的功能,大大減少PHP程式到資料庫的連線。
相關文章
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 和區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別
- WebApi和MVC的區別WebAPIMVC
- service和systemctl的區別
- GET和POST的區別?
- GET和POST的區別
- button和submit的區別MIT
- GET 和 POST 的區別
- 【Java】equals 和 == 的區別Java
- django和flask的區別DjangoFlask
- promise 和 Observable 的區別Promise
- sass和less的區別
- POST 和 GET 的區別
- cookie和session的區別CookieSession
- MTV和MVC的區別MVC
- mysql中!=和is not的區別MySql
- import和require的區別ImportUI
- JavaScript中for in 和for of的區別JavaScript
- WBS和TASK的區別?