Nginx原理简述

Nginx原理简述Nginx 原理简介 1 nginx 的作用反向代理 隐藏服务器的地址 负载均衡 轮询 权重 ip hash 动静分离 nginx 作为静态资源服务器 对 nginx 的主要操作都是在改配置文件 2 nginx 原理 nginx 是以进程为单位的 这里是进程不是线程 每个进程有自己独立的资源 不用再像线程一样加锁了 如果你刚下载好了 nginx 你启动之后 打开任务管理器看一下有几个 nginx 进程 如果不出意外 它会有两个 nginx 进程 为什么会有两个进程呢 原理解析 nginx 里面 有两

Nginx原理简介

1. nginx的作用

  • 反向代理(隐藏服务器的地址)
  • 负载均衡(轮询、权重、ip_hash)
  • 动静分离(nginx作为静态资源服务器)

    对nginx的主要操作都是在改配置文件。

2.nginx原理

nginx是以进程为单位的,这里是进程不是线程。每个进程有自己独立的资源,不用再像线程一样加锁了。

如果你刚下载好了nginx,你启动之后,打开任务管理器看一下有几个nginx进程,如果不出意外,它会有两个nginx进程。

为什么会有两个进程呢?

原理解析
nginx里面,有两种进程,一个是master进程,还有一个是worker进程。这个master进程,当有请求进来时,它会通知worker进程来处理这个请求。当有多个worker进程时(worker的数量取决于配置文件中work_process的值,默认为1)就会来争抢,一个请求只会被一个worker进程处理。

worker进程中只有一个主线程,主线程通过异步非阻塞的方式来处理拿到的请求,这个异步非阻塞可以理解为做循环不停的处理各种请求。这里的工作方式是这个主线程不停的在不同请求之间来回切换,这种切换不是不同线程之间的上下文切换,基本不损耗什么资源。这也是为什么nginx能够高并发的处理请求的关键原因。

多线程的上下文切换:当CPU不再执行当前线程,切换到另一个线程时,需要保存当前线程的信息,如计数器、虚拟机栈中各个栈帧的信息,并且还要读取另一个线程的这些东西,势必会影响效率。

有关worker进程中具体的处理方式,暂未了解,后续将会更进。

更新于2020.8.17晚

上述有关worker进程中处理多个连接请求的地方说的不是很好,worker进程采用多路复用的IO模型epoll,才使得一个进程能够处理大量的请求,至于它怎么实现的,底层原理是什么,这涉及到IO模型以及Linux的用户态和内核态的相关知识,目前我也不是很清楚。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233155.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何自动发送短信给女朋友

    如何自动发送短信给女朋友

    2021年9月17日
    79
  • Java JDK8下载 (jdk-8u251-windows-x64和jdk-8u271-linux-x64.tar)

    Java JDK8下载 (jdk-8u251-windows-x64和jdk-8u271-linux-x64.tar)jdk-8u251-windows-x64和jdk-8u271-linux-x64.tar链接:https://pan.baidu.com/s/1gci6aSIFhEhjY8F48qH39Q提取码:l289复制这段内容后打开百度网盘手机App,操作更方便哦JDK国国内官网下载地址:https://www.oracle.com/cn/java/technologies/javase-downloads.htmlJDK8国内官网下载地址:https://www.oracle.com/cn/j

    2022年7月21日
    109
  • windows vista模拟器_windows vista旗舰版

    windows vista模拟器_windows vista旗舰版由于科技的进步,微软当然不示落后,让很多市面上的笔记本电脑预装了WindowsVista操作系统,而使没有安装这一

    2022年8月31日
    8
  • C\C++中计时、延时函数「建议收藏」

    C\C++中计时、延时函数「建议收藏」C\C++标准库中提供了两种计时函数clock()和time()。其用法如下:(1)clock()函数用法voidtimeConsume(){doublestart,stop,durationTime;start=clock();/*…代码片段*/stop=clock();durationTime

    2022年6月25日
    34
  • 多个UpdatePanel控件相互引发刷新的使用

    多个UpdatePanel控件相互引发刷新的使用ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果。其中的UpdatePanel就是设置页面中异 步局部更新区域,它必须依赖于ScriptManager存在,因为ScriptManger控件提供了客户端脚本生成与管理UpdatePanel的功 能。几个重要的属性:    ScriptManager控件的EnablePartialRendering属

    2022年7月23日
    11
  • 计算机中为什么会用补码运算符号_负数求补码

    计算机中为什么会用补码运算符号_负数求补码总所周知,计算机内部的所有数都是以二进制的形式存在的。而二进制在计算机里又有多种编码方式——原码、反码、补码等。而在这些编码方式里面用得最多的不是最简单、最直接的原码而是补码。这是为什么呢?想搞懂这个问题首先得明白什么是原码、反码以及补码,如果你对他们还不太了解,那就先看看我另一篇博客——原码、反码、补码其实很简单。如果你对他们已经很熟悉,那么我们继续往下看。A、B、C三种相似的东西,

    2025年12月4日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号