nginx详解

Nginx详解

Nginx介绍

nginx是一个开源且高性能的HTTP服务器,可靠的HTTP中间件,代理服务。

Nginx应用场景(可以做什么)

HTTP服务

虚拟目录

反向代理

负载均衡

动静分离

资源缓存

Nginx 模型

单 nginx 官方统计并发量最高 5W

单 apache 官方统计并发量最高 2W

nginx 这得益于 I/O 模型

I/O 介绍

输入 输出 写 读

就好似磁盘 你往里放数据,是 I (输入)

你看磁盘里的电影就是 O (输出)

每次I/O,都要经由两个阶段

第一步:将数据从磁盘文件先加载至内核空间(缓冲区),等待数据准备完成,时间较长。

第二步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短。

image-20210925151810047

认识个单词 kernel 内核

同步

调用者等待被调用者返回消息,才能继续执行

例如: 老板布置你任务,一直向你询问 有没有完成,完成了老板做下一件事,这种通信机制成为同步。

异步

被调用者通知状态,通知或者回调机制主动通知被调用者的运行状态

例如:老板分配你任务,任务进度状态你会向老板汇报,老板做自己的事情,不会向你问询结果。

同步/异步 关注是被调用者消息通信机制

同步和异步的区别:
     同步:被调用者不会返回任务的状态,需要调用者不停的询问
     异步:被调用者会向调用者返回任务的状态,不需要调用者不停的询问
阻塞 Blocking

指 IO 操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起

例如:手洗衣服,没戏完之前你都是被占用的状态。

非阻塞 nobloking

指 IO 操作被调用后立刻返回一个用户状态,无需等IO操作彻底完成,最终的调用结果返回之前,调用者不会被挂起

例如:全自动洗衣机,不需要占用你时间,洗完会通知你,在期间你没有因为洗衣服被占用时间。

阻塞/非阻塞:关注调用者在等待结果返回之前的状态
IO模型
同步阻塞型

即用户进程通过系统调用拿资源,因不确定是否拿到数据,所以会一次次的询问结果,这个过程是同步。

将数据从磁盘拷贝到内核空间,再将内核中的数据复制到应用的用户空间,这个过程进程不能做其他事,即阻塞。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HqtASmIb-1634528106847)(C:\Users\yyc\AppData\Roaming\Typora\typora-user-images\image-20210925163939591.png)]

同步非阻塞

即用户进程通过系统调用拿资源,因不确定是否拿到数据,所以会一次次的询问结果,这个过程是同步。

将数据从磁盘拷贝到内核空间,再将内核中的数据复制到应用的用户空间,这个过程进程可以做其他事,即非阻塞。

这个较同步阻塞没有改善,看似非阻塞,进程可以干其他事,但由于是同步,进程依旧在不断问询结果,反而更消耗资源。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ay3qKRd2-1634528106849)(C:\Users\yyc\AppData\Roaming\Typora\typora-user-images\image-20210925164015624.png)]

IO多路复用(select)异步阻塞

用户进程找一个代理select,而不直接与内核打交道,系统调用交于select进行处理。

用户进程收到资源从磁盘写入内核缓冲区信息后,将内核缓冲区内容复制到用户空间。

select接待用户进程不是一对一的方式,而是一对多。用户进程依旧阻塞于select调用。这个有点像吃饭,客人和服务员之间的关系,>客人不会和后厨打交道,交由服务员完成。

IO多路复用只能成为异步阻塞模型,因阻塞在IO调用那里,但一个select可以检测多个IO模型,相比与同步阻塞只能检测一个提高了cpu的利用率。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p4y2Advo-1634528106850)(C:\Users\yyc\AppData\Roaming\Typora\typora-user-images\image-20210925164119445.png)]

信号驱动型 (异步半阻塞)

即用户进程建立SIGIO的信号处理程序,复制数据从磁盘到内核空间,等处理完递交SIGIO告知用户进程,这个过程是不阻塞的状态。

用户进程从内核空间复制到用户应用空间,这个过程是阻塞的。

信号驱动并未完全解决问题,只是做到了一部分不阻塞,一部分阻塞。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aASysISR-1634528106853)(C:\Users\yyc\AppData\Roaming\Typora\typora-user-images\image-20210925164143938.png)]

异步IO模型 (异步非阻塞) (epoll)

用户进程不受阻塞,所有的请求,拿数据拷贝到应用空间都由内核完成,用户进程可以接收更多的用户请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPp0dCg8-1634528106854)(C:\Users\yyc\AppData\Roaming\Typora\typora-user-images\image-20210925164218273.png)]

nginx高并发原理

nginx高并发使用的是epoll的方式,提供给用户访问,复制数据的一些操作交由内核完成。自身做的事情越少接待的用户请求就越多。

epoll在linux2.6中增加了内存拷贝mmap机制,加速与内核空间的消息传递,即内存映射。

内存映射机制:磁盘中有数据,数据有对应的inode,在内存中映射一个相同的inode,大小也相同,下次拿数据不需要遍历inode,分析路径了。这样提高了效率。

例如:好似学使用字典的,你先查找它是什么音,查到后直接找对应的字。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值