博客
关于我
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内置函数(35)——next
查看>>
python写入mysql
查看>>
python写入csv老是乱码或者各种不好
查看>>
Python内置函数
查看>>
Python2 安装MySQLdb库
查看>>
Python2 已终结,入手Python 3,你需要这30个技巧
查看>>
python写下拉列表在excel,无法使用python获取Excel下拉列表(组合框)值
查看>>
python2.7安装
查看>>
Python2.7安装ncmbot时提示:Microsoft Visual C++9.0 is required
查看>>
PYTHON2.Git.1
查看>>
python20181211
查看>>
Python内存管理机制
查看>>
Python2中range 和xrange的区别??
查看>>
python2和3的区别
查看>>
python2和python3的pip版本升级
查看>>
python2和python3的区别
查看>>
python2备份交换机配置脚本
查看>>
Python3 - 在字符串格式化程序参数中使用变量
查看>>
Python3 A*寻路算法实现
查看>>
python3 grpc安装
查看>>