【Nginx】事件驱动框架和异步处理
来源:互联网 发布:谷歌浏览器安全吗 知乎 编辑:程序博客网 时间:2024/05/18 03:51
Nginx对请求的处理是通过事件触发的,模块作为事件消费者,只能被事件收集、分发器调用。这与传统的Web服务器是不同的。传统的Web服务器下,一个请求由一个进程消费,请求在建立连接后将始终占用着系统资源,直到连接关闭才会释放资源。这样做有以下缺点:
- 进程数增加会增加进程间切换的负担,影响系统整体性能。
- 当某个进程要等待事件发生而处于阻塞状态时,该进程仍然占用内存资源直到该请求结束,造成资源极大浪费。
在Nginx中,接收到一个请求时,不会产生一个单独的进程来处理该请求,而是由事件收集、分发器(进程)调用某个模块,由模块处理请求,处理完后再返回到事件收集、分发器,如下图所示:
左侧按序号收集事件,右侧按序号调用消费者模块。从图中可以看出这种设计的一个弊端:当某个消费者模块阻塞而无法返回到事件收集、分发器,使得后者无法继续监听事件,最终导致其它事件得不到及时响应。所有,时间消费者的代码中不能有阻塞行为!
说到事件驱动机制,就要联系到异步处理了,因为两者是密切相关的:多阶段异步处理只能基于事件驱动框架实现。一个HTTP请求包含多个阶段,每个阶段在什么时候发生是不确定的,这就造成了异步性。每个阶段的发生都会触发事件驱动框架,然后交由事件消费者处理。也就是说一个事件消费者只是处理了一个请求中的一小部分。Nginx采用这样的设计,降低了进程休眠的几率,从而提高网络性能、降低请求延时。所以,Nginx的这种设计服务器的并发连接数能够达到十万甚至百万级别。
参考:
《深入理解Nginx》 P263-P267.
0 0
- 【Nginx】事件驱动框架和异步处理
- 【Nginx】事件驱动框架处理流程
- Netty框架之异步事件驱动模型
- Netty框架之异步事件驱动模型
- Netty框架之异步事件驱动模型
- Nginx 事件驱动模块连接处理
- Nginx学习笔记(十八):事件处理框架
- Nginx学习(18)—事件处理框架
- 单线程、事件驱动、异步非阻塞的nginx
- 单线程、事件驱动、异步非阻塞的nginx
- nodejs 异步I/O和事件驱动
- nginx学习笔记六(Nginx事件框架处理流程)
- Nginx 之三:nginx服务器模块、web请求处理机制及事件驱动模型、进程功能和进程间通信
- ruby 异步事件驱动的Ruby Web应用框架 Cramp
- Future异步事件驱动
- 事件驱动异步模式
- 同步、异步、事件驱动
- Nginx事件驱动初始化
- NOJ1091Black Vienna——人工智能?No...No...No...二分+枚举
- 水風井
- 刚接触开发板之接口接线工具
- windows下 wxPython 无法导入的解决方法
- 【比特科技】计算机专业就业指南(一)
- 【Nginx】事件驱动框架和异步处理
- UI笔记_UIPageControl
- linux/unix man用法
- 刚接触开发板之烧写裸板程序
- C++ Primer Plus第六版 第四章 编程练习答案
- linux c++之互斥变量和条件变量
- Nhibernate 对view 查询的几种方法
- 刚接触开发板之重烧珍整个系统
- Java基础——Statement与PrepareStatement