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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WEB3.0白皮书[通俗易懂]

    WEB3.0白皮书[通俗易懂]I//Part1新浪潮//那么Web3.0究竟是什么?TA能给当今世界带来什么变化?TA由哪些技术组成?如何实现Web3.0?TA能带来哪些机会?我们能从中得到什么?Web3.0是一个非常前沿的话题,充满了不确定性,也没有任何人能准确预测她何时到来,会以何种形式到来。但趋势已现,仅以此文抛砖引玉,希望与志同道合者一起推动。Web…

    2022年5月15日
    55
  • Redis主从复制实现

    Redis中的主从复制,也就是Master-Slave模型,其实现相对比较简单,一般使用在多个Redis实例间的数据同步以及Redis集群中用的比较多。• 工作原理• 特征说明• 如何配置• 验证使用

    2022年4月8日
    44
  • java inputstreamreader类详解_inputstreamreader是什么流

    java inputstreamreader类详解_inputstreamreader是什么流java底层从计算机读取的统统都是二进制,所以一开始我们读取的时候都是先简历连接通道,然后将文件数据以字节流的形式读取进入通道。#建立连接Filefile=newFile(“a.txt”);#二进制流的通道。FileInputStreamfileInputStream=newFileInputStream(file);#你想啊,fileInputStr…

    2022年9月26日
    2
  • JVM指令重排[通俗易懂]

    JVM指令重排[通俗易懂]参考http://www.infoq.com/cn/articles/java-memory-model-2/点击打开链接数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a=1;b=a;写一个变量之后,再读这个位置。写后写a=1;a=2;写一个变量之后,再写这个变量。读后写a=…

    2022年10月18日
    2
  • 如何设计三极管控制继电器电路[通俗易懂]

    如何设计三极管控制继电器电路[通俗易懂]在用三极管驱动继电器的时候,不管是NPN还是PNP,都要把继电器接在三极管的集电极,而不会接在发射极上。一般初学者都会容易碰到这个问题,下面和大家分析一下这个问题。

    2022年6月24日
    26
  • 莫队算法详解_数据结构入队和出队

    莫队算法详解_数据结构入队和出队莫队算法详解本文翻译自MO’sAlgorithm(Querysquarerootdecomposition),作者anudeep2011,发表日期为2014-12-28。由于最近碰到一些莫队算法的题目,找到的相关中文资料都比较简略,而这篇英语文章则讲解的比较详细,故翻译成中文与大家分享。由于本人水平有限,错误在所难免,请谅解。

    2022年4月19日
    47

发表回复

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

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