Nginx學習-初步理解

請求方式

  • Nginx是一款高性能的web服務器,能夠同時處理大量的併發請求,主要是得益於Nginx的master-worker進程模式和異步機制。
    • master-worker模式
      1. nignx服務器對於接收到的每一個請求,都會有主進程master生成一個工作進程(worker process)處理。工作進程讀取到這個客戶端請求事件後,調用後端的I/O進行處理。
      2. 對於worker的進程數量,肯定不是越多越好。因爲進程太多,會引發CPU的切換和調度,這樣會浪費資源。通常情況下,worker進程的數量與服務器CPU的核數相等。這樣做的好處,可以避免過多的worker進程競爭CPU資源。
      3. worker進程之間是相互獨立的,這樣設計就是避免了去競爭同一把鎖的性能開銷。同時一個進程異常退出之後,不影響其他進程正常工作。
    • 異步非阻塞
      1. worker 進程接收到客戶端請求後,直接調用I/O處理,如果不能立即得到結果,就去處理其他事情。I/O處理完成後,會通知worker進程,該worker進程得到通知,暫時掛起當前處理的事物去響應客戶端。

事件驅動

  1. Nignx事件驅動模型主要分爲事件收集器,事件發送器,事件處理器三大部分。其中事件收集器讀取到worker的各種I/O請求後,交給事件發送器處理,事件發送器將讀取到的請求發送給事件處理器進行處理。
  2. 事件處理器是真正負責各種I/O事件的,事件處理器採用多路複用模式設計。
  3. 主要模型關係如下:
    事件驅動模型

    請求原理

    1. nginx採用master-worker進程模式工作,即一個master進程,多個worker子進程。對於客戶端發送過來的請求client-request,只能由一個worker進程處理,則多個worker進程是如何爭奪客戶端的client-request請求。
      這裏寫圖片描述
  4. Nginx服務器啓動後,master進程創建listen的socket文件描述符,即listenfd。然後調用fork()函數創建子進程worker process。worker進程在讀取客戶端請求前,需要先獲取master進程中的accept_mutex互斥鎖,只有獲得accept_mutex鎖的worker進程才能註冊listenfd事件。即通過調用accept方法接收client的請求,解析請求,處理請求等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章