nginx為什么快

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

nginx為什么快

設計原理

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

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

由于這兩種別具一格的方式使得nginx在同類型的網頁服務器中表現優秀

連接方式

一般web服務器連接方式分為三種:多進程方式、多線程方式和異步方式。多進程需要內存復制等額外開銷、多線程不需要開銷較小

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

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

Nginx所做的其他

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

連接處理機制

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

以下是重點:

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

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

異步IO:當一個異步過程調用請求發出后,調用者不能立即得到結果。實際處理這個調用的部件在完成后,會通過狀態、通知和回調來通知調用者的輸入輸出操作

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

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享