博客
关于我
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 day10
查看>>
Python Day17 Django 03
查看>>
python day21
查看>>
python decode和encode
查看>>
Python del 语句
查看>>
Python Dict 理解创建和更新字典
查看>>
Python Discord Bot - python clear_reaction() 清除所有反应而不是特定反应
查看>>
python django mysql写入中文乱码_django自动创建的mysql表里面中文乱码问题
查看>>
python docx的超链接网址和链接文本
查看>>
python elasticsearch 导出数据到json文件导入到另一个es中
查看>>
python进阶(1):json的使用
查看>>
python ETL工具 pyetl
查看>>
Python eval 函数说明
查看>>
python eval简介
查看>>
python excel 饼图 简书_Python实现绘画多个饼图
查看>>
python excel接口自动化测试框架!
查看>>
Python exec 函数解析:探索动态代码执行的无限可能!
查看>>
Python EXEC和__NAME__
查看>>
Python exe文件打包神器-Nuitka!
查看>>
python file
查看>>