CGI FastCGI mod php工作原理

2022-03-25 15:50:14 字數 1082 閱讀 9368

先了解一下普通cgi的工作流程:

web server收到使用者請求,並把請求提交給cgi程式,cgi程式根據請求提交的引數作相應處理,然後輸出標準的html語句返回給web server,web server再返回給客戶端,這就是普通cgi的工作原理。

從上面看,cgi所要實現的不過是動態網頁而已,這種處理方式的特點就是每接到乙個請求,web server都要fork出乙個單獨的cgi程式的程序來處理,這種方式的好處是把web server和具體的程式處理獨立開來,結構清晰,可控性強,同時缺點就是如果在高訪問需求的情況下,cgi的程序fork就會成為很大的伺服器負擔,想象一下數百個併發請求導致伺服器fork出數百個程序就明白了。這也是為什麼cgi一直揹負效能低下,高資源消耗的惡名的原因。

相應的有問題就有解決方案,目前流行的方案就是使用模組設計,基本上目前的web server都有相應的模組機制來擴充它的功能,只要按照其設計規範設計出來的模組,就能插入到web server自身的程序處理,因此效能有很大改觀,例如iis的isapi,apache的dso。但是,這種方法也不是沒有缺點的,例如對於不同的web server,要按照不同標準開發,無法做到webserver無關性;例如這將輸入驗證的工作轉交給了web server,沒辦法自由處理;例如一旦出現問題將影響整個web server處理流程;例如插入web server程序導致的無法以多使用者標示執行,無法處理虛擬主機許可權等。

所幸我們還有另外的選擇,這就是fastcgi。fastcgi是基於cgi架構的擴充套件,他的核心思想就是在web server和具體cgi程式之間建立乙個智慧型的可持續的中間層,統管cgi程式的執行,這樣web server只需要將請求提交給這個層,這個層再派生出幾個可復用的cgi程式例項,然後再把請求分發給這些例項,這些例項是可控的,可持續,可復用的,因此一方面避免了程序反覆fork,另一方面又可以通過中間層的控制和探測機制來監視這些例項的運**況,根據不同的狀況fork或者**例項,達到靈活性和穩定性兼得的目的。

本人曾經做過測試,使用cgi方式執行php效率最差,mod_php方式效能非常不錯,幾乎是cgi方式的50倍,但是無法保證虛擬主機站點的安全性隔離,而fastcgi效能則基本和mod_php相當,這還是在使用了suexec切換虛擬主機站點執行使用者的情況下的結果。

Read Write spinlock工作原理

1 假設臨界區內沒有任何的thread,這時候任何read thread或者write thread可以進入,但是只能是其一。2 假設臨界區內有乙個read thread,這時候新來的read thread可以任意進入,但是write thread不可以進入 3 假設臨界區內有乙個write thr...

SpringCloud Eureka工作原理

eureka 作為 spring cloud 體系中最核心 預設的註冊中心元件,研究它的執行機制,有助於我們在工作中更好地使用它。eureka 註冊中心 包含兩個元件 eureka server和eureka client。服務提供者和服務的消費者。eureka負責管理 記錄服務提供者的資訊。服務呼...

selenium webdriver工作原理

1 啟動瀏覽器,selenium webdriver會將目標瀏覽器繫結帶特定的埠,啟動後的瀏覽器則作為webdriver的remote server 服務端 2 客戶端 也就是測試指令碼 傳送http請求給server端。通訊協議 the webdriver wire protocol,在http請...