nginx事件驱动模型

nginx事件驱动模型

1).事件驱动模型介绍:

事件驱动模型是实现异步非阻塞的一个手段。事件驱动模型中,一个进程(线程)就可以了。

对于web服务器来说,客户端A的请求连接到服务端时,服务端的某个进程(Nginx worker process)会处理该请求,此进程在没有返回给客户端A结果时,它又去处理了客户端B的请求。服务端把客户端A以及客户端B发来的请求作为事件交给了“事件收集器”,而“事件收集器”再把收集到的事件交由“事件发送器”发送给“事件处理器”进行处理。最后“事件处理器”处理完该事件后,通知服务端进程,服务端进程再把结果返回给客户端A、客户端B

在这个过程中,服务端进程做的事情属于用户级别的,而事件处理这部分工作属于内核级别的。也就是说这个事件驱动模型是需要操作系统内核来作为支撑的。

2).nginx的事件驱动模型:

nginx的事件驱动模型,支持select、poll、epoll、rtsig、kqueue、/dev/poll、eventport等。

最常用的是前三种,其中kqueue模型用于支持BSD系列平台的事件驱动模型。kqueue是poll模型的一个变种,本质上和epoll一样。/dev/poll是Unix平台的事件驱动模型,其主要在Solaris7及以上版本、HP/UX11.22及以上版本、IRIX6.5.15及以上版本、

Tru64 Unix 5.1A及以上版本的平台使用。eventport是用于支持Solaris10及以上版本的事件驱动模型。

3).在linux平台支持的事件模型有3类:

Linux平台的事件模型有:select模型、poll模型、epoll模型,其中epoll模型效率最高。

select模型: 

Linux和Windows都支持,使用select模型的步骤是:

a).创建所关注事件的描述符集合,对于一个描述符,可以关注其上面的读(Read)事件、写(Write)事件以及异常发生(Exception)事件。在select模型中,要创建这3类事件描述符集合

b).调用底层提供的select()函数,等待事件发生。

c).轮询所有事件描述符集合中的每一个事件描述符,检查是否有相应的事件发生,如果有就进行处理

poll模型:

poll模型是Linux平台上的事件驱动模型,在Linux2.1.23中引入的,Windows平台不支持该模型。

poll模型和select模型工作方式基本相同,区别在于,select模型创建了3个描述符集合,而poll模型只创建一个描述符集合。但是也是轮询这一个集合的事件描述,如果有相应事件发生,就处理。

epoll模型:

epoll模型属于poll模型的变种,在Linux2.5.44中引入。epoll比poll更加高效,原因在于它不需要轮询整个描述符集合

而是Linux内核会关注事件集合,当有变动时,内核会发来通知。

事件驱动模型的参考链接:https://github.com/aminglinux/nginx/blob/master/4z/event.md

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维实战课程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值