目標
理解nginx高效原理
高效原因分析
- 多進程單線程模型,充分利用硬件資源,單線程減少上下文切換
- 非阻塞式io模型,減少上下文切換,減少阻塞io的資源利用率問題,實現(xiàn)單線程處理大量tcp連接(redis也采用類似架構(gòu))
一. 多進程單線程模型

。NGINX有一個主進程(master process)(執(zhí)行特權(quán)操作,如讀取配置、綁定端口)和一系列工作進程(worker process)和輔助進程(helper process)。
nginx采用可預(yù)見式的進程模型,根據(jù)硬件資源開啟工作進程
主進程執(zhí)行特權(quán)操作,如讀取配置和綁定端口,還負責創(chuàng)建子進程(下面的三種類型)。
緩存加載進程(cache loader process)在啟動時運行,把基于磁盤的緩存(disk-based cache)加載到內(nèi)存中,然后退出。對它的調(diào)度很謹慎,所以其資源需求很低。
緩存管理進程(cache manager process)周期性運行,并削減磁盤緩存(prunes entries from the disk caches),以使其保持在配置范圍內(nèi)。
工作進程(worker processes)才是執(zhí)行所有實際任務(wù)的進程:處理網(wǎng)絡(luò)連接、讀取和寫入內(nèi)容到磁盤,與上游服務(wù)器通信等。默認配置
: worker_processes auto,一個內(nèi)核一個工作進程
二.非阻塞式io模型

三 更新配置升級方式

更新NGINX的配置,是一個非常簡單的、輕量級的、可靠的操作。運行nginx –s reload命令即可,該命令會檢查磁盤上的配置,并給主進程發(fā)送一個SIGHUP信號。
當主進程接收到SIGHUP信號后,會做兩件事:
1. 重新加載配置,fork一套新的工作進程。這些新的工作進程會立即開始接受連接和處理流量(traffic)(使用新的配置)。
2. 發(fā)出信號,通知舊的工作進程安靜地退出。這些舊進程不會再接受新的連接了。只要它們處理的HTTP請求結(jié)束了,它們就會干凈地關(guān)閉連接。一旦所有的連接都被關(guān)閉,工作進程也就退出了。
原文鏈接,本文為整理資料:https://www.cnblogs.com/chenjfblog/p/8715580.html