浅谈nginx的I/O模型和特性功能

引言:

只要功夫深,铁杵磨成针!!!

如何理解nginx,首先要放松心态,其实很好理解,只要记住I/O模型中原理图即可。

第一大点

内核空间和用户空间!!!!
当用户发送网络请求(http):

1.请求报文首先进入web服务器的内核空间里的(内核空间内存)
2.内核空间到用户空间
3.再由用户空间发往内核空间,有内核就行下一步操作
4.由内核发往客户端

第二大点

I/O 模型相关概念

同步:A要B帮忙处理事情,事情处理完后需要A向B过问事情结果
异步:A要B帮忙处理事情,事情处理完后B主动汇报处理结果
阻塞:A要B帮忙处理事情,A要看着B处理事情,全程陪同
非阻塞:A要B帮忙处理事情,A可以去泡杯茶,抽根烟,不用看着B处理事情

好理解吧!!!就这么简单!!

网络 I/O 模型

分为:阻塞型、非阻塞型、复用型、信号驱动型、异步

但是在nginx采用的是复用型I/O模式,那就来就浅谈一下五种网络I/O模型把。

什么是I/O,就理解为INput 和OUNput (半路出家选手,英语不好!急着吃饭!)

 

阻塞型:用户发送请求报文,用户线程在内核进行IO操作时被阻塞,意思是先排队,等我消息。
非阻塞型:用户线程需要不断地发起IO请求,直到数据 到达后才真正读取到数据,继续执行。可以理解成轮询
复用型:Nginx采用的!主要包括:select,poll,epoll三种系统调用,select/poll/epoll的好处就在于单个 process就可以同时处理多个网络连接的IO。它的基本原理就是select/poll/epoll这个function会不断的轮询所负责的所有socket,当某个socket有数 据到达了,就通知用户进程。
信号驱动型:今天话题浅谈,你可以理解为就加了一个开关,或者是有个触发器
异步:全程不堵塞,异步I/O不是顺序执行。用户进程进行aio_read系统调用之后,无论内核数据是否准备 好,都会直接返回给用户进程,然后用户态进程可以去做别的事情。等到socket数据准备好了,内核直 接复制数据给进程,然后从内核向进程发送通知。IO两个阶段,进程都是非阻塞的。

更直观的印象,那就是五种I/O进行对比!!

 

第三大点

nginx中利用的是第三种复用型!

1、select: apache中使用,select库是在linux和windows平台都基本支持的 事件驱动模型库,并且在接口的定义也基本相同,只是部 分参数的含义略有差异,最大并发限制1024,是最早期的事件驱动模型。

2.epoll的处理方式是创建一个待处理的事件列表,然后把这个列表发给内核,返回的时候在去轮训检查这个 表,以判断事件是否发生,epoll支持一个进程打开的最大事件描述符的上限是系统可以打开的文件的最大 数,同时epoll库的I/O效率不随描述符数目增加而线性下降,因为它只会对内核上报的“活跃”的描述符进行 操作。

对比图:

select:
操作方式为遍历,可以理解为是班长交代给班里人员任务,完成后需要班长自己去问每个人完成的与否。
最大链接数也是有局限的,最大进程1024,但不会真正的开这么多进程,会损耗CPU。

epoll: 

操作方式为回调,相当于是班长下发的任务给班内人员,班内人员完成后主动向班长汇报任务的完成与否。
最大链接数也是无上限的。

 

 

 

分享完毕!干饭干饭!!!!~

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值