nginx,php-fpm

一,Nginx是異步非阻塞多進程,io多路復用

在這里插入圖片描述
1、master進程:管理進程
master進程主要用來管理worker進程,具體包括如下4個主要功能: (1)接收來自外界的信號。 (2)向各worker進程發送信號。 (3)監控woker進程的運行狀態。 (4)當woker進程退出后(異常情況下),會自動重新啟動新的woker進程。
2、worker進程:處理請求
而基本的網絡事件,則是放在worker進程中來處理了。多個worker進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,只可能在一個worker進程中處理,一個worker進程,不可能處理其它進程的請求。worker進程的個數是可以設置的,一般我們會設置與機器cpu核數一致,這里面的原因與nginx的進程模型以及事件處理模型是分不開的。
worker進程之間是平等的,每個進程,處理請求的機會也是一樣的。當我們提供80端口的http服務時,一個連接請求過來,每個進程都有可能處理這個連接,怎么做到的呢?
Nginx采用異步非阻塞的方式來處理網絡事件,類似于Libevent,具體過程如下:
1)接收請求:首先,每個worker進程都是從master進程fork過來,在master進程建立好需要listen的socket(listenfd)之后,然后再fork出多個worker進程。所有worker進程的listenfd會在新連接到來時變得可讀,每個work進程都可以去accept這個socket(listenfd)。當一個client連接到來時,所有accept的work進程都會受到通知,但只有一個進程可以accept成功,其它的則會accept失敗。
2)處理請求:當一個worker進程在accept這個連接之后,就開始讀取請求,解析請求,處理請求,產生數據后,再返回給客戶端,最后才斷開連接,這樣一個完整的請求就是這樣的了
我們可以看到,一個請求,完全由worker進程來處理,而且只在一個worker進程中處理。worker進程之間是平等的,每個進程,處理請求的機會也是一樣的。

雖然nginx采用多worker的方式來處理請求,每個worker里面只有一個主線程,那能夠處理的并發數很有限啊,多少個worker就能處理多少個并發,何來高并發呢?非也,這就是nginx的高明之處,nginx采用了異步非阻塞的方式來處理請求,也就是說,nginx是可以同時處理成千上萬個請求的。一個worker進程可以同時處理的請求數只受限于內存大小,Worker 進程 不再同步阻塞的去處理一個請求,而是可以同時處理多個請求,無需 I/O 等待。請求r1-1,r1-2,r1-2都再在woker1進程中,如果r1-1發生阻塞需要等待,worker1就會去處理r1-2,等到r1-1處理好了由事件通知再將結果返回。

二,php-fpm是阻塞式單線程模型

在這里插入圖片描述

  1. 客戶端發送的請求到達nginx后nginx會解析后轉發給php-fpm進程管理器
  2. php-fpm在master進程中創建多個work進程,調用一個work進程處理php代碼。有請求到達work后阻塞在fcgi_accept_request()上,各自accept請求然后處理,這期間是不會接收其他請求的,也就是說work進程同時只能響應一個請求,只有把這個請求處理完了才會處理下一個。
  3. 如果所有的work都處于忙碌狀態(阻塞),那么這些請求就會阻塞在master進程上。
  4. 所有work均是搶占模式來處理請求。
  5. 搶占模式:每個進程都可以得到一定CPU時間片的時間處理,時間片結束或是進程發生阻塞(數據庫連接、網絡請求I/O(如發送短信、郵件第三方接口)、讀寫文件、sleep等待)就會觸發上下文切換,CPU會經由調度程序去處理下一個進程的內容。等待阻塞結束再將進程由阻塞態加入就緒態隊列(此時的進程處于就緒隊列高等級),等待cpu調度執行。
  6. php從代碼級別的執行上是單線程的, 但是由php-fpm進程管理機制是多進程單線程的, 也就是php是多進程執行的. 有效提高并發的響應效率。
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716323.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAP PP學習筆記04 - BOM2 -通過Serial來做簡單的BOM變式配置,副明細,BOM狀態,BOM明細狀態,項目種類,遞歸BOM

本章繼續講BOM。 本章講通過Serial來做簡單的BOM變式配置。還講了BOM的相關概念:副明細,BOM狀態,BOM明細狀態,項目種類,遞歸BOM 等。 1,通過Serial(序列號)來做簡單的 VC&#xff0…

spring自定義注解之-ElementType.METHOD方法級注解聲明

自定義注解類型和常用場景 可以參考之前的文章 : ElementType.FIELD字段級注解聲明 如果在項目中,多處地方都需調用到同一個方法進行邏輯處理,且與方法的業務邏輯無關,比如監控,日志等,則可用自定義的方法…

【JavaSE】面向對象——繼承性

繼承性 繼承性的概念 所謂繼承,就是程序猿在保持原有類特性的基礎上進行擴展,增加新功能,這樣的類被稱為派生類或者子類,原有類被稱為超類或者基類。 在對于繼承性概念進行書寫前,我曾查閱許多資料來保證對其表達的…

Some collections -- 2024.3

一、TensorFlow Android (dataset: Mnist) We used TensorFlow to define and train our machine learning model, which can recognize handwritten numbers, called a number classifier model in machine learning terminology. We transform the trained TensorFlow mod…

C++學習第五天(內存管理)

1、內存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);int…

2024.03.01作業

1. 基于UDP的TFTP文件傳輸 #include "test.h"#define SER_IP "192.168.1.104" #define SER_PORT 69 #define IP "192.168.191.128" #define PORT 9999enum mode {TFTP_READ 1,TFTP_WRITE 2,TFTP_DATA 3,TFTP_ACK 4,TFTP_ERR 5 };void get_…

高維中介數據:基于交替方向乘子法(ADMM)的高維度單模態中介模型的參數估計(入門+實操)

全文摘要 用于高維度單模態中介模型的參數估計,采用交替方向乘子法(ADMM)進行計算。該包提供了確切獨立篩選(SIS)功能來提高中介效應的敏感性和特異性,并支持Lasso、彈性網絡、路徑Lasso和網絡約束懲罰等不…

npm 鏡像源切換與設置

項目背景 依賴安裝中斷或響應特別慢。 可以看到當前所用的鏡像是 https://registry.npmjs.org 。 切換淘寶鏡像之后總算能夠安裝下來 命令行模式 查看當前鏡像源 # 查看當前鏡像源 npm config get registry 可以看到默認情況下是官方默認全局鏡像 https://registry.npmjs.o…

競爭加劇下,登頂后的瑞幸該做什么?

瑞幸咖啡僅用短短18個月時間從品牌創立到納斯達克上市,刷新全球最快上市記錄。2020年因交易造假事件被勒令退市股價暴跌80%,有人說這個創造了赴美IPO奇跡的“巨嬰”將是下一個倒下的ofo。2023年瑞幸咖啡以逆勢超速增長領跑咖啡賽道有力回應了市場的質疑&…

Vector中的begin和end函數是左閉右開的區間

vector::end() 函數的語法 vector::end(); 參數&#xff1a; none——它什么都不接受。 返回值&#xff1a; iterator– 它返回一個指向向量的 past-the-end 元素的迭代器。 實際上Vector中的begin和end函數是左閉右開的區間。 例&#xff1a; Input: vector<int>…

Java多線程實現發布和訂閱

目錄 簡介 步驟 1: 定義消息類 步驟 2: 創建發布者 步驟 3: 創建訂閱者 步驟 4: 實現發布-訂閱模型 前言-與正文無關 生活遠不止眼前的苦勞與奔波&#xff0c;它還充滿了無數值得我們去體驗和珍惜的美好事物。在這個快節奏的世界中&#xff0c;我們往往容易陷入工作的漩渦…

棋牌室計時計費管理系統的燈控器連接教程

棋牌室計時計費管理系統的燈控器連接教程 一、前言 以下教程以 佳易王棋牌室計時計費管理系統軟件V18.0為例說明 軟件文件下載可以點擊最下方官網卡片——軟件下載——試用版軟件下載 如上圖&#xff0c;計時計費軟件在開始計時的時候&#xff0c;點擊 開始計時 如果連接了…

YOLOv9獨家改進|動態蛇形卷積Dynamic Snake Convolution與空間和通道重建卷積SCConv與RepNCSPELAN4融合

專欄介紹&#xff1a;YOLOv9改進系列 | 包含深度學習最新創新&#xff0c;主力高效漲點&#xff01;&#xff01;&#xff01; 一、改進點介紹 Dynamic Snake Convolution是一種針對細長微弱的局部結構特征與復雜多變的全局形態特征設計的卷積模塊。 SCConv是一種即插即用的空間…

華為OD機試真題C卷-篇6

100分值題 寬度最小的子矩陣部門人力分配電腦病毒感染會議室占用時間段 寬度最小的子矩陣 給定一個n行 * m列的矩陣&#xff1b;給定一個k個整數的數組k_list&#xff1b;在n*m的矩陣中找一個寬度最小的子矩陣&#xff0c;該子矩陣包含k_list中所有的整數&#xff1b; 輸入描述…

【大數據】Flink SQL 語法篇(九):Window TopN、Deduplication

《Flink SQL 語法篇》系列&#xff0c;共包含以下 10 篇文章&#xff1a; Flink SQL 語法篇&#xff08;一&#xff09;&#xff1a;CREATEFlink SQL 語法篇&#xff08;二&#xff09;&#xff1a;WITH、SELECT & WHERE、SELECT DISTINCTFlink SQL 語法篇&#xff08;三&…

COM - get VARIANT value - .vt = (VT_BSTR | VT_ARRAY)

文章目錄 COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY)概述筆記END COM - get VARIANT value - .vt (VT_BSTR | VT_ARRAY) 概述 取到一個VARIANT值, .vt 0x2008, 查了一下, 0x2008 (VT_BSTR | VT_ARRAY) 查了資料, 這個vt 0x2008是BSTR的數組. 看看咋取值? 網上…

3.2 log |416. 分割等和子集,1049.最后一塊石頭的重量II,494.目標和

416. 分割等和子集 class Solution { public:bool canPartition(vector<int>& nums) {vector<int> dp(10001,0);int sumaccumulate(nums.begin(),nums.end(),0);if(sum%2) return false;int targetsum/2;for(int i0;i<nums.size();i){for(int jtarget;j>…

項目管理:高效推動項目成功的關鍵

項目管理&#xff1a;高效推動項目成功的關鍵 在當今競爭激烈的商業環境中&#xff0c;項目管理已成為企業實現目標和取得成功的關鍵因素。有效的項目管理不僅能夠確保項目按時完成&#xff0c;還能在預算范圍內達到預期的質量標準。本文將探討項目管理的重要性、關鍵環節以及…

Maven安裝并配置本地倉庫

一、安裝Maven 1.下載鏈接 Maven官網下載鏈接 Binary是可執行版本&#xff0c;已經編譯好可以直接使用。 Source是源代碼版本&#xff0c;需要自己編譯成可執行軟件才可使用。 tar.gz和zip兩種壓縮格式,其實這兩個壓縮文件里面包含的內容是同樣的,只是壓縮格式不同 tar.gz格…

Stable Video文本生成視頻公測地址——Scaling Latent Video Diffusion Models to Large Datasets

近期&#xff0c;Stability AI發布了首個開放視頻模型——"Stable Video"&#xff0c;該創新工具能夠將文本和圖像輸入轉化為生動的場景&#xff0c;將概念轉換成動態影像&#xff0c;生成出電影級別的作品&#xff0c;旨在滿足廣泛的視頻應用需求&#xff0c;包括媒…