博客
关于我
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 rsa 加密
查看>>
Python RSA操作
查看>>
Python轻松实现统计学中重要的相关性分析
查看>>
Python scrapy 常见问题及解决 【遇到的坑】
查看>>
Python Seborn热图数据的动态更新
查看>>
Python Seborn绘制空白直方图
查看>>
Python Selenium - 获取href值
查看>>
Python Selenium实现自动化测试及Chrome驱动使用!
查看>>
Python Selenium搭建UI自动化测试框架
查看>>
Python Selenium模块详解
查看>>
Python selenium爬取影评生成词云图
查看>>
python selenium自动化测试报告
查看>>
Python selenium自动化测试框架实战 —— 登录测试案例
查看>>
Python Selenium设计模式 —— POM
查看>>
Python Serial:如何使用 read 或 readline 函数一次读取多个字符
查看>>
Python set([]) 如何检查两个对象是否相等?一个对象需要定义哪些方法来自定义它?
查看>>
Python setup.py:数据文件无法复制目录:不存在或不是常规文件
查看>>
Python setuptools sdist:仅安装版本化文件
查看>>
Python Shell下使用matplotlib
查看>>
Python Slice How-to,我知道Python Slice,但我怎么才能使用内置的Slice对象呢?
查看>>