Pwner's Blog

能全力以赴不尽力而为

0%

Nginx 基础 - 1

Nginx 基础

概述

Nginx 是一个开源的高性能、可靠的 HTTP 中间件、代理服务。(关于代理服务的作用,详见三种常用的代理方式详解

优势

Nginx 具备的是企业最常用也最需要的功能,具备轻量级性能优势。

底层原理

  1. 采用多路 IO 复用 epoll 模型

    epoll模型的作用
  2. CPU 亲和(affinity)

    为什么需要CPU亲和
  3. senfile 策略

    Nginx 在静态资源处理性能方面性能强大的原因正在于此。

    常用file处理流程

对于操作系统而言,文件需要经过内核空间与用户空间才进入 socket 流。而 Nginx 简化了这个流程:

sendfile的处理流程

多路 IO 复用

IO复用

对于多个用户请求,会产生多个 Socket 流,海量 IO 流可能使得线程处于等待状态造成阻塞

阻塞

所以采用 IO 复用的方式来处理,通常有以下两种处理方式:

  1. 多进程多线程处理

    一个线程只能处理一个流的 I/O 事件。如果想要同时处理多个流,要么多进程(fork)要么多线程(pthread_create),但是效率都不高。

    多进程多线程处理模式
  2. 多路 IO 复用

    单线程实现 IO 流非阻塞模式,伪代码如下:

1
2
3
4
5
6
while true{
for i in stream[];{
if i has data
read until unavailiable
}
}

IO 复用内核模式种类

Select 模型、Poll 模型

select,poll 模型相当于一个代理

1
2
3
4
5
6
7
#select模型伪代码
while true{
select(streams[]){
for i has data
read until unavailable
}
}
Epoll 模型
  1. 解决了 select 模型对于文件句柄 FD 打开限制
  2. 采用 callback 函数回调机制优化模型效率
  3. ……

劣势

Nginx 具备的功能,其他服务也在采用(如 Apache),功能全面上不占优势。

如果文章对你有用,可以请我喝杯咖啡~
  • 本文作者: Pwner
  • 本文链接: https://pwner.cn/posts/2d1a9a94.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!