Nginx 基础知识

学习前必须理解的概念

linux下的I/O模型

I/O模型就是处理请求I/O读写的方式(一切皆文件),比如我们访问网页所有的请求过程内部是怎么实现的

1、等待数据准备,数据会先被拷贝到操作系统内核的缓冲区中(内存中)
2、将数据从内核拷贝到进程中,内核态到用户态转换

正是因为这两个阶段,linux系统产生了五种网络模式的方案
在这里插入图片描述

主要结合3点I/O模型

  • 异步和异步
  • 阻塞和非阻塞
  • I/O 多路复用

异步和异步

重点在消息通知的方式的行为,也就是调用结果的通知方式不同

  • 同步:当一个同步调用发出去后,调用者要一直等待调用的结果通知后,才能进行后续的执行。
  • 异步:当一个异步调用发出去后,调用者不必一直等待调用结果的返回,异步调用,要想获得结果
    一般有两种方式:
    1、主动轮询异步调用的结果;
    2、被调用方通过callback(回调通知)来通知调用方调用结果

同步取快递:收到短信后,就去通知点等着快递到
异步取快递:收到短信后,快递已经到达后再去取
1、快递着急使用,几分钟我就给快递小哥打一个电话问下到了没有
2、不着急等着快递小哥到了,打我电话我再去拿

阻塞和非阻塞

重点在于进/线程等待消息时候的行为,也就是在等待消息的时候,当前进/线程是阻塞状态,还是非阻塞状态

等着快递来的时候我是否还能做点其他事情呢

  • 阻塞:调用在发出去后,在消息返回之前,当前进/线程会被挂起,直到有消息返回,当前进/线程才会被激活
  • 非阻塞:调用在发出去后,不会阻塞当前进/线程,而会立即返回

阻塞取快递:我啥事情不做,就等着快递来
非阻塞取快递:我一边玩游戏一边等快递来

组合方式

  • 同步阻塞:收到信息后,啥都不干,去指定点等快递
  • 同步非阻塞:收到信息后,边玩游戏,去指定点等着取快递
  • 异步阻塞:收到信息后,啥都不干,等着快递员通知取快递
  • 异步非阻塞:收到信息后,边玩游戏,等快递员通知取快递

apahe基于同步阻塞
nginx基于异步非阻塞

I/O 多路复用

让单个process可以同时处理多个网络连接的IO,也就是解决我一边玩游戏还能一边确保收到快递,还能做其他事情

底层是同步调用,上层逻辑是异步调用
数据拷贝是同步的,数据准备前是异步的

epoll

当连接有I/O事件产生的时候,epoll就会去告诉进程哪个连接有I/O事件产生,然后进程就去处理这个事件,epoll事件驱动模型是实现异步非阻塞的一个手段(设置一个中间件来统一管理进程,避免进程出现闲置)

快递柜取快递:收到短信后,快递先放到了快递柜中,然后我再去取快递,有可能立即就去,也可能很晚再去拿,就是等我闲置了时候,这样我就可以按照顺序做事,提高了效率

在这里插入图片描述

Nginx图解
在这里插入图片描述

  • Nginx主进程会创建worker进程进行处理,Ngnix主进程只是作为管理暴露到外部,实际干事的是worker进程(默认个数是CPU的内核数,我是虚拟机2个内核)

在这里插入图片描述

  • 每个子进程会进行进程初始化,模块调用以及对事件的接收和处理等工作

学习网页:https://blog.51cto.com/jacksoner/2315700?source=dra
学习网页:https://juejin.im/post/6844903687626686472#heading-5
学习视频:链接:https://pan.baidu.com/s/1SuhPdbdQbexsDMKKmvyUaQ 提取码:ptm8

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页