nginx
nginx是乙個高效能http和反向**伺服器,也是乙個imap/pop3/smtp伺服器。
能夠支援高達5w以上併發連線數的響應,nginx選擇了epoll/kqueue作為網路io模型。
nginx也可以作為負載均衡伺服器,nginx使用c語言編寫。
nginx是乙個主程序和多個工作程序,工作程序是單執行緒的。每個工作程序可以採用非同步非阻塞的方式處理客戶端請求。
【擴充套件學習 非同步非阻塞 以及epoll select poll kqueue】
nginx中php是以fastcgi的方法結合nginx。
客戶端傳送請求給nginx伺服器,nginx伺服器通過fastcgi將這個請求交給php進行處理,php處理的結果通過fastcgi返回給nginx伺服器
之後nginx伺服器再將結果返回給客戶端。
fastcgi的知識
cgi是一種通用閘道器介面 是外部應用程式和web伺服器之間的介面標準,在外部應用程式和web伺服器之間傳遞資訊的規程。
cgi規範允許web伺服器執行外部程式,並將它們輸出傳送給web瀏覽器。
fastcgi是對cgi的一種改進。
fastcgi像是乙個常駐記憶體型的cgi,當請求到達時cgi會先fork出乙個程序來進行處理這個請求
但是fastcgi在啟動載入時,就啟動多個cgi直譯器,並等待web伺服器的連線。
當客戶端請求到達webserver的時候,fastcgi程序管理器會選擇乙個cgi直譯器來處理這個請求。
好處是cgi直譯器被載入記憶體不需要每次需要的時候從儲存器中讀取,極大提高了站點的效能
fastcgi的問題是修改php配置的時候不能立刻生效。需要reload一下。
阻塞 客戶端的乙個請求過來,web伺服器接收這個請求,這個請求需要進行io操作,
io操作需要耗費10秒,那麼web伺服器就等待10秒,在這10秒的時間裡,web伺服器拒絕其他的客戶端請求。
非阻塞
乙個客戶端的請求過來,web伺服器接收這個請求,這個請求需要進行io操作,並且io需要耗時10秒
web伺服器在io操作的這10秒裡,還是可以接收其他客戶端請求,web伺服器將這些請求的檔案描述符放到乙個佇列裡,當io操作準備好
就將資料傳送給這個客戶端。
非同步非阻塞io模型
乙個master執行緒 和多個worker執行緒 ,乙個worker執行緒可以處理多個請求,如果請求的事件沒有處理好,那麼就將這個事件檔案描述符放到乙個佇列中
當事件處理好之後,再去讀請求返回的結果,所以可以處理大量的併發請求,當然這裡的併發只是沒有處理完的請求,由於worker是乙個執行緒
所以,能同時處理的請求只要乙個。
只是在請求間進行不斷地切換而已,切換也是因為非同步事件未準備好,而主動讓出的。
這裡的切換是沒有任何代價,你可以理解為迴圈處理多個準備好的事件,事實上就是這樣的。
與多執行緒相比,這種事件處理方式是有很大的優勢的,不需要建立執行緒,每個請求占用的記憶體也很少,沒有上下文切換,
事件處理非常的輕量級。併發數再多也不會導致無謂的資源浪費(上下文切換)
Nginx 學習書單整理
以下是 nginx到底該怎麼學?的主題綱要。n n n 第一點 nginx對整個架構的幫助是非常大的。n 但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。n2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx...
Nginx 學習書單整理
以下是 nginx到底該怎麼學?的主題綱要。第一點 nginx對整個架構的幫助是非常大的。但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它...
Nginx 學習書單整理
以下是 nginx到底該怎麼學?的主題綱要。第一點 nginx對整個架構的幫助是非常大的。但是不管你怎麼樣做,總有點隔靴搔癢的感覺,你根本沒辦法做大幅度的優化,因為它的結構已經決定了這些問題的出現。2009年我到了思科之後,也遇到了同樣問題,但我開始接觸nginx,發現用nginx改造伺服器之後,它...