首頁  >  文章  >  運維  >  nginx為什麼快

nginx為什麼快

(*-*)浩
(*-*)浩原創
2019-06-13 09:13:396615瀏覽

Nginx為何高效,如此之快的原因?

nginx為什麼快

設計原理

一個高效能伺服器典型特點是處理速度區塊且佔用資源少.尤其是當萬連接同時在線時候.若要做到處理速度快,並發模型設計尤其關鍵.

伺服器並發量取決於兩個因素:一是伺服器連接的進程數量,二是每個進程可同時處理的並發請求數,因而伺服器並發模型由兩部分構成,服務的提供方式和連結處理機制,

#由於這兩種別具一格的方式使得Nginx在同類型的網頁伺服器中表現優秀

#連線方式

一般web伺服器連線方式分為三種:多進程方式、多執行緒方式和非同步方式。多進程需要記憶體複製等額外開銷、多執行緒不需要開銷較小

異步則採用非阻塞的方式與每個客戶通信,伺服器用一個進程進行輪詢,典型應用如Nginx的work process進程。其中效率最高是非同步,最穩定是多進程、佔用資源少是多執行緒 

Nginx基於事件模型(非同步方式)提供服務,更適合每秒連線數和請求數同時非線性增長的情況。即使負載增加了,記憶體和CPU使用事件數量始終保持可預期。 Nginx使用普通的硬體就能在一個伺服器上處理數萬的同時連線。這就是Nginx高效能的第一個原因。

Nginx所做的其他

除了以上兩大原理,內部有大量可見的細節優化,採用多進程單線程的工作方式,並且利用cpu和進程的親緣性將進程和特定cpu綁定,避免了進程上下文切換的開銷,從而減少了cpu佔用。另外它實現了高效的記憶體池,將記憶體佔用降到最低等

#連接處理機制

#linux 連接模型有五種,同步io,同步費阻塞io,非同步阻塞io(io復用),非同步非阻塞io(訊號驅動或非同步io)

以下是重點:

<1> io復用,I/O復用模型會用到select或poll函數,這兩個函數也會使進程阻塞,與阻塞I/O有所不同,他們也可以同時阻塞多個I/O操作,而且可以同時對多個讀操作,多個寫入操作的I/O函數進行檢測,直到有資料可讀或可寫入時,才真正呼叫I/O操作函數。

在io復用模型中,select和poll一般操作系統都會支持,但是每次等待都需要設置需要等待的套接字接口,並且內部實現不夠高效,很那支付監聽高並發的套接口集,不同的作業系統使用了不同的高階輪詢技術來支援高效能的監聽,一般這些方式都不是可移值的。 而Nginx針對不同的作業系統,客製了不同的I/O處理機制,且一般都會採用作業系統的高效能接口,這是Nginx的高效能的第二個原因

#<2>非同步IO:當一個非同步過程呼叫請求發出後,呼叫者無法立即得到結果。實際處理這個呼叫的元件在完成後,會透過狀態、通知和回呼來通知呼叫者的輸入輸出操作

#更多Nginx相關技術文章,請造訪Nginx使用教學欄目進行學習! 

以上是nginx為什麼快的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn