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的用户态和内核态的相关知识,目前我也不是很清楚。