博客
关于我
Nginx的进程模型简单理解
阅读量:514 次
发布时间:2019-03-07

本文共 1031 字,大约阅读时间需要 3 分钟。

协程机制

协程是一种线程内的内存模型,允许单个线程维护多个协程。当我们的协程(如read方法)遇到阻塞时,系统会立即切换到另一个不阻塞的线程执行read任务。这使得我们无需过分关注socket read操作何时返回。由于read操作完成后会按顺序执行回调函数,这种协程模型成为同步型协程,无需额外加锁。

Epoll多路复用模型

传统的Java BIO模型中,socket.write会将数据写入TCP/IP缓存区,缓存区填充到一定程度时,网络传输慢或客户端发送过多请求时,会导致客户端一直等待。为了解决这一问题,Linux select模型 kicks in。

在工作方式上,select模型会遍历固定数量的客户端,当检测到客户端变化时,唤醒变化的客户端分别执行read操作。虽然select模型的监听端点数理论上最多为1024(форk与 structs内存限制相关),但它会在大量客户端同时变化时产生性能问题。

Epoll多路复用作为select模型的改进者,摆脱了1024个端点限制,提供了更高效的多客户端I/O操作。epollserver能够监听任意数量的 客户端,每个客户端都有专门的回调处理,当检测到变化时立即执行相应的操作。

Master-Worker模型

Master-Worker模型是Nginx的核心架构设计。Master负责管理多个Worker进程,而每个Worker则独立处理客户端请求。当Nginx启动时,master先启动并根据配置创建临时Worker进程。当_worker数量日增长到最大值时_,master会根据负载决定是否创建更多的Worker。

每个Worker进程内部都采用Epoll多路复用模型为客户端提供服务。这种设计使得回调在数据可用时自动触发,避免阻塞。每个 我们知道,Epoll单线程非阻塞的处理方式,最高吞吐量远高于多线程方式。

masters在客户端请求增加时会分配资源,建立连接并启动Epoll多路复用。最终,由于Master-Worker模型的特点,在执行nginx -s reload命令时,Worker仅需销毁所有客户端连接,而Master可以临时接手管理接口。

线程?进程?实际上, 每个Worker仅使用一个线程。我们可以将每个Worker视为一个单线程复用机制。而Epoll通知机制让处理更高效,速度果然远高于多线程复用。

这种架构使Nginx既能处理巨量请求,还能在不完整重启的情况下优化配置。

转载地址:http://xcwnz.baihongyu.com/

你可能感兴趣的文章
Python中的空元组是“常量“吗?
查看>>
Python中的类-ChatGPT4o作答
查看>>
Python中的类中的池
查看>>
python中的装饰器基础
查看>>
python中的负零
查看>>
Python中的进程通信
查看>>
Python中的递归有多安全?
查看>>
python中程序如何获取实现多行输入
查看>>
python中算法与数学_中国古代数学算法的Python实现
查看>>
python中类的实例化_python类的实例化
查看>>
Python中类的约束
查看>>
python中自定义sort 规则
查看>>
python中自定义错误_在现代Python中声明自定义异常的正确方法?
查看>>
python中获取上一个月一号的方法
查看>>
python中蜂窝网格边缘的坐标
查看>>
Python中表示偶数_分享一组 Python 高效编程的实用技巧
查看>>
Python中赋值,深拷贝和浅拷贝
查看>>
python中输出字符串的和数字的几种方式
查看>>
Python中进行特征重要性分析的9个常用方法
查看>>
Python中通过MyQR生成gif动图二维码
查看>>