Nginx高效核心

Introduction

做最近的软工作业的时候,需要部署网站,比较了多款Web服务器之后,选择了短小精悍的Nginx,本文记录学习Nginx过程中理解到的Nginx高效的核心原因。

Nginx,Engine X简称,是一个高性能的HTTP服务器,和其他同类产品相比,Nginx一直以内存小、高并发闻名。

访问Nginx服务器,大致可以归结为一个网络I/O过程,而网络I/O的本质上是socket流的读取。对于socket流而言,通常分为两步,将数据从磁盘准备好然后从内核缓冲区复制到应用进程缓冲区,然后进行传送过程。

I/O特性

同步/异步

调用者、被调用者的消息的通信机制

  • 同步:调用者等待被调用者返回消息,才能继续执行,通常表现为轮询
  • 异步:被调用者通过状态、通知、回调等机制通知调用者自己的运行状态

阻塞/非阻塞

调用者在调用结束之前所处的状态

  • 阻塞:当调用结束之前,调用者被挂起
  • 非阻塞:无需等到调用结束,调用者可以继续执行其他任务

常见的I/O模型

下面的五种常见模型,前四种都是同步模型

阻塞型

在数据拷贝(内核空间、用户空间之间)完成之前,进程会一直阻塞,直到完成。如下图:

发起recvfrom()调用的时候,系统会检查是否有准备好的数据,如果没有则等待(阻塞),当数据准备完成之后,将数据从内核空间复制到用户空间(依然阻塞),然后再返回。

非阻塞型

在数据拷贝(内核空间、用户空间之间)完成之前,进程不会一直阻塞,而是会继续执。如下图:

发起recvfrom()调用的时候,如果没有准备好的数据,进程会继续执行,但是执行过程中会轮询测试系统调用的状态,准备好之后再复制数据(阻塞),尽管比阻塞型有所改善,但轮询会消耗大量计算资源。

多路复用模型(多路阻塞)

多路复用是指对于一个I/O端口,可以多次调用,多次返回。如下图:

当进程发起select()调用的时候,这个函数也会使进程阻塞,但是和阻塞I/O不同的,它可以同时阻塞多个I/O操作,而且可以同时对多个读/写操作的I/O进行检测,直到有数据可读或可写时,才真正调用I/O操作函数。

信号驱动模型

仍然是多次调用多次返回,如下图:

I/O伊始,给socket对应一个信号处理函数,然后进程继续执行,当数据准备完成之后,进程会受到一个SIGIO信号,然后调用信号处理函数进程I/O处理(仍然阻塞)。

异步模型

数据复制的时候无需阻塞,如下图:

当发起aio_read()调用的时候,调用者不会立刻得到结果,二十要等所有操作结束之后才通知信号处理程序。

Nginx中的I/O模型

nginx 支持多种并发模型,并发模型的具体实现根据系统平台而有所不同。在支持多种并发模型的平台上,nginx自动选择最高效的模型,当然也可以手动指定。

Nginx的高并发性能正是因为Nginx采用了异步I/O模型(epoll()),而Apache等服务器采用的多路复用模型(select)。

epoll()优点:

  • 理论并发数无上限
  • 内存映射机制
  • ...

Reference

https://www.cnblogs.com/chuyiwang/p/9884041.html

Nginx高效核心的更多相关文章

  1. nginx高效学习方法

    nginx高效学习方法 nginx做为一个高性能的web服务器,相对于apache等服务器来说它的代码量并不是非常庞大,反而非常精简.看过nginx源码的人都知道,nginx将“一切皆为模块”和“所有 ...

  2. Nginx HTTP 核心模块

    原文链接:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17238776&id=2982697aio 语法:aio [ ...

  3. 【Nginx】核心模块ngx_events_module

    核心模块ngx_events_module是一个专门用于管理事件模块的模块. 它的实现非常easy.以下是该模块的定义: ngx_module_t ngx_events_module = { NGX_ ...

  4. nginx学习(五):nginx.conf 核心配置文件详解

    整体结构 详细信息 1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为nobody user root; 2.worker进程工作数设置,一般来 ...

  5. Nginx之核心结构体ngx_cycle_t

    1. ngx_listening_t 结构体 ngx_cycle_t 对象中有一个动态数组成员叫做 listening,它的每个数组元素都是 ngx_listening_t 结构体,而每个 ngx_l ...

  6. Nginx的核心功能及应用实战

    反向代理功能及配置: 反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给interne ...

  7. Java高级架构师(一)第33节:Nginx常用核心模块指令

    error_log:错误日志级别 http://www.nginx.cn/doc/  Nginx中文文档 # 并发总数是 worker_processes 和 worker_connections 的 ...

  8. Nginx(二)--nginx的核心功能

    反向代理 nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理. proxy_pass 既可以是ip地址,也可以是域名,同时还可以指定端 ...

  9. RogrePirates Scrum Meeting 博客汇总

    RogrePirates 博客目录 一.Scrum Meeting 1.Alpha阶段 第一次会议 第二次会议 第三次会议 第四次会议 第五次会议 第六次会议 第七次会议 第八次会议 第九次会议 第十 ...

随机推荐

  1. WEB漏洞——文件上传

    有关文件上传的知识 为什么文件上传存在漏洞 上传文件时,如果服务端代码未对客户端上传的文件进行严格的验证和过滤就容易造成可以上传任意文件的情況,包括上传脚本文件(asp.aspx.php.jsp等格式 ...

  2. ABP 极简入门教程(一)

    本示例不讲概念,只讲怎么用,概念性的内容没有比官方文档更清楚的了,我也正在学习,可能理解的地方有不对的欢迎一起交流,但需要您了解以下内容才能看明白 asp.net core Entity Framew ...

  3. 生产环境部署高可用Rancher

    环境准备: IP hostname role 192.168.200.150 nginx LB 192.168.200.151 master01-151 docker-ce/rke/helm/kube ...

  4. php处理url的rawurlencode:可处理空格加号

    (PHP 4, PHP 5, PHP 7) rawurlencode - 按照 RFC 3986 对 URL 进行编码 返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号( ...

  5. Linux系列(1) - 使用Hyper-V安装Linux系统

    前言 使用工具:Hyper-V,补充:hyper-v是一项技术,而vmware是一款软件.具体区别自行百度 LINUX版本:CentOS-8.4.2105-x86_64-dvd1.iso Window ...

  6. Shell系列(17)- 配置文件功能(待完善)

    配置文件功能 文件名 功能 相关联命令 /etc/profile USER变量 LOGNAME变量 MAIL变量 PATH变量 HOSTNAME变量 umask 调用/etc/profile.d/*. ...

  7. ❤️【Android精进之路-03】创建第一个Android应用程序竟然如此简单❤️

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文会重点介绍如何创建第一个Android应用,以及如何使用Android Studio进行调试 干货满满,建议收藏,需要用到时常看看.小伙伴们如 ...

  8. 常用的ppt技巧

    取色器 对齐 形状使用

  9. javascript Date 日期格式化 formatDate, require.js 模块 支持全局js引入 / amd方式加载

    * 引入AMD加载方式: require.js CDN https://cdn.bootcss.com/require.js/2.3.5/require.js *  创建模块文件./js/util/d ...

  10. chrome 的 options 参数

    在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用.相对应的,当我们用chrom ...