日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Nginx >内容正文

Nginx

【Nginx】Nginx 工作原理

發布時間:2023/12/10 Nginx 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Nginx】Nginx 工作原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Nginx 架構以及工作流程圖


Nginx 在是以守護進程的形式在后臺運行,采用 多線程+異步非阻塞IO事件模型 來處理各種請求。多線程模型包括一個 master 進程,多個 worker 進程,一般 worker 進程個數是根據服務器 CPU 核數來決定的。master 進程負責管理 Nginx 本身和其他 worker 進程。

Master 進程的主要職責

  • 讀取并驗證配置信息(nginx.conf)
  • 創建,綁定,關閉套接字(IP + PORT)
  • 啟動,終止,維護 worker 進程的個數

Worker 進程的主要職責

  • 處理連接和請求
  • Worker 進程的個數由配置文件決定,一般和 CPU 個數相關,配置幾個就有幾個 Worker 進程。

Nginx 如何實現熱部署

所謂熱部署,就是修改配置文件 nginx.conf 后,不需要重啟 nginx,不需要中斷請求,就能讓配置文件生效。

在修改完配置文件后,會重新生成新的 worker 進程,會以新的配置進行處理請求,而且新的請求也會交給新的 worker 進程處理,老的 worker 進程,會在執行完請求直接關閉。

Nginx 如何做到高并發下的高效處理

Nginx 采用了 Linux 的 epoll 模型,epoll 模型是基于事件驅動機制,它可以監控多個事件是否準備完畢,如果 OK,那么放入 epoll 隊列中,這個過程是異步的。worker 只需要從 epoll 隊列循環處理即可。

Worker 如何處理請求

一個請求由一個 worker 進程處理。

Nginx 在內部維護了一個 accept_mutex,其實就是鎖,確保在某一時刻,一個請求只能被一個 worker 進程捕獲。當一個 worker 進程在 accept 這個連接之后,就開始讀取請求,解析請求,處理請求,產生數據后,再返回給客戶端,最后才斷開連接。

異步/非阻塞/事件驅動

我們知道,很多請求來了,他們大多需要讀寫數據,發生IO請求,此時程序就會發生中斷,如果此時我們一直等待IO調用結束,才繼續工作,那么這種就是阻塞的,那么很顯然很多請求來了,都處于等待狀態,CPU就將處于空閑狀態,為了提供高并發的能力,Nginx采用的是非阻塞的方式。如果發生IO中斷,那么你去做你的事情,但是過一段時間來看看IO調用是否結束,這就是非阻塞:你可以做更多的事情,但是你得時不時的檢查中斷狀態,帶來的開銷也不小。

為了更高效,Nginx利用了LINUX的EPOLL模型(其他系統類似):

EPOLL模型,提供一種事件驅動機制,它可以監控多個事件是否準備好了,如果準備好了,那么就放入EPOLL隊列中。這種機制是異步的。通過這樣,WORKER進程只需要循環處理EPOLL隊列中的請求,我們只需要在請求間不斷切換,而這種切換是不需要付出什么代價的,通過這種循環處理已經準備好的請求,從而Nginx可以高效的處理高并發的問題。

總結

以上是生活随笔為你收集整理的【Nginx】Nginx 工作原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。