nginx基本原理

进程模型

当nginx启动之后,会有一个master进程和多个worker进程。默认是一个worker进程。
在这里插入图片描述
master进程的作用:接收来自外界信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程在异常情况下退出后,会自动重新启动新的worker进程。
worker进程作用:处理基本的网络事件。
在这里插入图片描述
多个worker进程之间时对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求只可能在一个worker进程中处理,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,原因与nginx的进程模型以及事件处理模型是分不开的。

当有请求到来,master进程只是通知(发信号)每个worker进程有请求到来,然后worker进程去争抢请求。而不是从master进程获取请求。
在这里插入图片描述

设计优点

  • 方便热部署(./nginx -s relaod)的实现
    当master进程在收到信号后,会重新加载配置,启动新的worker,并向所有老的worker进程发送信号,不再接收新的请求,并且在老进程处理完所有未处理完的请求后,退出。
    由于一个master进程和多个worker进程,可以实现不需要重启nginx的情况下,重新加载配置。
  • 节省资源和健壮性好
    由于每个worker进程是独立的,不需要像线程一样需要加锁,省掉了锁的开销。
    并且每个worker之间不会影响,一个进程退出,其它进程还在工作,服务不会终端,并且master进程会启动新的worker进程。当然worker进程的异常退出会导致当前worker上的所有请求失败,不过不会影响所有的请求,所以减低了风险。

事件模型

nginx采用的epoll模型,异步非阻塞,IO多路复用机制。对于nginx来说,把一个完整的连接请求处理都划分成了一个事件。每部分都有相应的模块去处理,一个完整的请求可能由几百个模块去处理。
例如:一个worker一开始注册了一个accpet事件,当一个客户端请求连接时,连接事件变为可读,worker进程执行相应的模块,再注册监听连接事件,等待请求的到来。当有请求到来变为可读时,epoll模型就会通知worker进程执行相应的模块处理。处理完,再注册发送事件,当可以发送事件就绪时,再通知worker进程执行相应的模块。
真正核心的就是事件收集和分发模块,只有核心模块的调度才能让对应的模块占用CPU资源。拿一个http请求来说,首先事件收集分发模块注册感兴趣的监听事件,注册好之后不阻塞直接返回,当有连接来临时,内核会通知(epoll模型会通知进程),CPU就可以处理其它事情了。

为什么说worker进程的个数和机器cpu核数一致最好?
worker是一个单独的进程,里面只有一个主线程,通过异步非阻塞的方式来处理请求,即使千万个请求也可以处理,每一个worker线程可以把cpu的性能发挥到极致。所以worker数和服务器的cpu核数相等最为适宜。设少了会浪费CPU,设多了会导致CPU频繁切换上下文带来损耗。

连接数

  • 客户端发送请求,占用了worker的几个连接数?
    2个或者4个。
    当访问的是静态资源时,worker进程接收请求一个连接,然后将静态资源返回一个连接,总共两个连接。
    当访问的时动态资源时,worker进程接收请求一个连接,发送请求动态资源请求给动态资源服务器一个连接,再接收动态资源服务器响应一个连接,然后将动态资源返回一个连接,总共四个连接。
  • 当nginx有一个master进程,四个worker进程,每个worker进程支持最大连接数为1024,worker支持最大并发数(请求数)为多少?
    最大连接数为:4 * 1024
    最大并发数为:4 * 1024 / 2(访问静态资源) 或 4 * 1024 / 4 (反向代理,访问动态资源)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#实现数据采集系统-实现功能介绍

系统介绍 我们这里主要使用C#( .Net 6)来实现一个数据采集系统,从0到1搭建数据采集系统,从系统分析,功能拆解,到一一实现 数据采集 数据采集是企业信息化和数字化转型过程中的关键环节,它涉及到从生产设备、传感器…

jupyter_contrib_nbextensions安装失败问题

目录 1.文件路径长度问题 2.jupyter不出现Nbextensions选项 1.文件路径长度问题 问题: could not create build\bdist.win-amd64\wheel\.\jupyter_contrib_nbextensions\nbextensions\contrib_nbextensions_help_item\contrib_nbextensions_help_item.yaml: No su…

【艺术向】【素描创作记录】《如何为你的红颜知己创作一幅画像(之二)》

写在前面 之前分析过类似的创作过程,见博客【艺术向】【素描创作记录】《如何为你的红颜知己创作一幅画像》 本人业余时间修习素描多年,在此撰文记录《如何为你的红颜知己创作一幅画像(之二)》,博得对方好感&#xff…

C++常见问题

一、C入门基础 1.1、函数重载 函数重载允许在同一作用域内定义多个同名函数,只要这个函数的参数列表(即参数的数量,类型或者顺序不同) 如何支持:程序经过编译后,编译器会对程序中的函数按一定规则进行重…

设计模式-Git-其他

目录 设计模式? 创建型模式 单例模式? 啥情况需要单例模式 实现单例模式的关键点? 常见的单例模式实现? 01、饿汉式如何实现单例? 02、懒汉式如何实现单例? 03、双重检查锁定如何实现单例&#xff…

封装MAVSDK为JAR包并导出给其它Android工程用完整示例

效果: 未解锁状态 已执行解锁指令 已执行起飞指令 飞行中 已执行降落指令 已执行返航指令 实现步骤: 1.准备PX4容器并启动:

ip地址是电脑还是网线决定的

在数字化时代的浪潮中,网络已经成为了我们日常生活和工作不可或缺的一部分。当我们谈论网络时,IP地址无疑是一个核心的概念。然而,关于IP地址的分配和决定因素,很多人可能存在误解。有些人认为IP地址是由电脑决定的,而…

springboot nacos的各种注解、手动操作监听配置变化(监听指定DataId/监听任何变化)

文章目录 springboot nacos监听配置变化(监听指定DataId/监听任何变化)监听任何配置变化Nacos注解NacosConfigurationPropertiesNacosValueNacosConfigListenerNacosInjectedNacosConfigServiceNacosNamingService springboot nacos监听配置变化&#xf…

QT--事件(丰富操作,高级功能)

一、事件 1.事件与信号的区别 事件来自外部,是随机发生的。信号来自内部,是主动发生的。有点像外中断和内中断的区别。事件:适用于处理系统级别的输入和状态变化,种类繁多,能够应对复杂的交互需求。信号/槽&#xff…

中国 X86 CPU 技术源自何方

注: 原文发布于 2017 年,两篇合二为一。未与作者沟通,侵权,立删。 导语: Intel 对 X86 的授权有着极为严格的限制,那么上海兆芯的 X86 芯片技术到底从何而来?ZX-C 目前的短板在哪里?…

pytorch 46 将ASpanFormer模型导出onnx运行

ASpanFormer是一个2022年8月份发布的算法,其主要步骤与LoFTR模型类似,因此无法导出为onnx模型。根据ASpanFormer论文中的数据与效果图,可以确定AsPanFormer是可以作为一个比SP+SG更为有效的方案,其在标准数据集上的效果优于SP+SG,在速度上远超SP+SG,与LoFTR接近;在预测点…

【深度学习入门项目】多层感知器(MLP)实现手写数字识别

多层感知器(MLP)实现手写数字识别 导入必要的包获得软件包的版本信息 下载并可视化数据查看一个batch的数据查看图片细节信息设置随机种子 定义模型架构Build model_1Build model_2 Train the Network (30 marks)Train model_1Train model_1Visualize th…

AI+X活动开放报名!Datawhale来南京了

Datawhale线下 主办方:讯飞开放平台、Datawhale、GDG南京 AIX 主题活动今年将走进 10 个城市,100 所高校,目前已经走进32所高校,以及北京、深圳、上海、杭州、武汉五个城市,南京是第六个城市,时间7月27号。…

IP-Trunk简介

定义 IP-Trunk是将多个链路层协议为HDLC的POS接口捆绑到一起,形成一条逻辑上的数据链路,以提供更高的连接可靠性和更大的带宽,实现流量负载分担。 目的 POS是一种应用在城域网及广域网中的技术,利用SONET/SDH提供的高速传输通道…

html改写vue日志

本人最近学了vue&#xff0c;想着练手的方法就是改写之前在公司开发的小系统前端&#xff0c;将前端的AJAXJSThymeleaf改为axiosvue。 改写html 将<html>中的<head>和<body>结构移除&#xff0c;将css部分移入<style>&#xff0c; 重新定义了全局的&…

视频汇聚,GB28181,rtsp,rtmp,sip,webrtc,视频点播等多元异构视频融合,视频通话,视频会议交互方案

现在视频汇聚&#xff0c;视频融合和视频互动&#xff0c;是视频技术的应用方向&#xff0c;目前客户一般有很多视频的业务系统&#xff0c;如已有GB28181的监控&#xff08;GB现在是国内主流&#xff0c;大量开源接入和商用方案&#xff09;&#xff0c;rtsp设备&#xff0c;音…

科研绘图系列:R语言单细胞聚类气泡图(single cell bubble)

介绍 单细胞的标记基因气泡图是一种用于展示单细胞数据中特定基因表达情况的可视化方法。它通常用于展示细胞亚群中标记基因的表达水平,帮助研究者识别和区分不同的细胞类型。在这种图表中,每个细胞亚群用不同的颜色表示,而基因表达水平则通过气泡的大小来表示,从而直观地…

【IEEE出版,会议历史良好、论文录用检索快】第四届计算机科学与区块链国际学术会议 (CCSB 2024,9月6-8)

CCSB 2024会议由深圳大学主办&#xff0c;旨在探讨计算机科学的最新发展如何与区块链技术相结合&#xff0c;以及这一结合如何推动金融、供应链管理、数据安全和其他多个行业的革新&#xff0c; 本次会议将提供一个多学科交流的平台&#xff0c;汇集来自相关领域学者的研究和思…

最优化理论与方法-第十讲-对偶理论的基本性质和割平面法

文章目录 1. 向量化拉格朗日对偶函数2. 对偶问题是凹函数3. 对偶问题转换4. 外逼近法4.1 步骤4.2 注意事项 1. 向量化拉格朗日对偶函数 ( D ) max ⁡ d ( λ , μ ) s t . λ i ≥ 0 , i 1 , ⋯ , m , d ( λ , μ ) min ⁡ x ∈ X { f ( x ) ∑ i 1 m λ i g i ( x ) ∑ …

【AI那些事】YOLO算法在香橙派AIpro上跑起来的初体验

一、本文概述 在之前推出的Yolo算法后&#xff0c;我在windows电脑上使用python语言运行将其跑通了&#xff0c;觉的这个识别算法很是有意思&#xff0c;就一直想着这个算法能不能跑在硬件的开发板上那就太好了。我就开始寻找市面上可行的开发板&#xff0c;一直期盼的事情真的…