一次性讲清楚,Nginx详解其原理,可以给我鼓掌了

本文详细解释了同步异步和阻塞非阻塞的区别,并以Nginx为例说明其请求处理机制,同时涉及Java面试中可能遇到的相关知识点,包括多进程架构和热部署原理。
摘要由CSDN通过智能技术生成

乍一看这四个概念的解释会瞬间感到头大,也经常讲同步异步等同于阻塞非阻塞,其实,区分他们非常简单。同步异步与阻塞非阻塞的主要区别是针对对象不同。

同步异步是针对调用者来说的,调用者发起一个请求后,一直干等被调用者的反馈就是同步,不必等去做别的事就是异步。

阻塞非阻塞是针对被调用者来说的,被调用者收到一个请求后,做完请求任务后才给出反馈就是阻塞,收到请求直接给出反馈再去做任务就是非阻塞。

而对于非阻塞模式来说,通过事件触发的方式来达到目的。我们可以认为NIO底层中存在一个I/O调度线程,它不断地扫描每个Socket的缓冲区,当发现写入缓冲区为空的时候,它会产生一个Socket可写事件,此时程序就可以把数据写入到Socket中。如果一次写不完,就等待下一次的可写事件通知;反之,当发现缓冲区里有数据的时候,它会产生一个Socket可读事件,程序收到这个通知事件就可以从Socket读取数据了。
那么基于这些概念又引除了四个概念: 同步阻塞、同步非阻塞、异步阻塞、异步非阻塞

**同步阻塞:**发送方向接收方发送请求后,一直等待接收方响应;接收方在处理请求时进行的IO操作如果不能马上得到结果,就一直等待结果返回才响应发送方。期间一直处于阻塞状态;

image.png

**同步非阻塞:**发送方向接收方发送请求后,一直等待响应,接收方在进行IO操作的时候,可以不需要等待直接去做其他事,而因为还没有获得结果,发送方仍然处于等待状态。接收方获得io的操作完成后,把结果响应给发送方,接收方才进入下一次请求过程。

image.png

**异步阻塞:**发送方向接收方发送请求后,不用等待响应,可以接着进行其他操作。接收方处理请求时进行的IO操作如果不能立刻获得结果,就一直等待返回结果后向发送方响应。

image.png

**异步非阻塞:**发送方发送请求后,不用等待响应,可以继续做其他事情。接收方处理请求时进行的IO操作如果不能马上得到结果,也不等待,而是去做其他事情。当io操作完成后,把结果通知给接收方,接收方再响应给发送方。

image.png

Nginx服务器的请求处理过程

Nginx结合了多进程机制异步机制对外提供服务
Nginx服务启动后,会产生一个主进程多个工作进程

master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的求,worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。

Master进程的作用是?
读取并验证配置文件nginx.conf;管理worker进程;
Worker进程的作用是?
每一个Worker进程都维护一个线程(避免线程切换),处理连接和请求;注意Worker进程的个数由配置文件决定,一般和CPU个数相关(有利于进程切换),配置几个就有几个Worker进程。

image.png

五、热部署

master来管理worker进程,所以我们只需要与master进程通信就行了。master进程会接收来自外界发来的信号,再根据信号做不同的事情,比如我们前面常用的

./sbin/nginx -c conf/nginx.conf -s reload

执行这个命令时,master收到这个信号以后先启动一个新的Nginx进程,而新的Nginx进程在解析到reload参数后,就知道是要控制Nginx来重新加载配置文件,它会向master进程发送信号,然后master会重新加载配置文件,再启动新的worker进程,并向所有老的worker进程发送信号,告诉他们可以退休了,新的worker启动之后就可以以新的配置文件接收新的请求了 – 热部署的原理

image.png

六、worker进程是如何处理请求?

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

最新整理面试题
在这里插入图片描述

上述的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题

最新整理电子书

在这里插入图片描述

最新整理大厂面试文档

在这里插入图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

最新整理大厂面试文档

[外链图片转存中…(img-0JElHRDr-1710405598013)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值