Nginx-->基础-->理论-->nginx进程模型
一、nginx的进程模型基础
如上图,是nginx的基本进程模型。
1.nginx的master进程与worker进程关系
nginx的master进程负责worker进程的管理,包括创建worker进程、发送信号给worker、监控worker进程的运行状态等。master进程是worker进程的管理者。在实际的nginx运行中:
master进程是以root身份运行的,而worker进程是以我们创建的nginx对应用户或者nginx.conf中的user nobody;这个配置中指定的用户如nobody用户运行的。
2.master进程概述
①:master进程个数,master进程的主要任务是管理worker进程,这就意味着,nginx在启动时只创建一个master进程,也只有一个master进程。master进程是可以取消的,这么做可以实现让nginx以单进程的方式运行,实际生产环境中不会这么操作。
②:用户的操作相关信号,不是直接对worker通信,而是通过将信号传递给master进程, master进程再与worker进程交互。
3.worker进程概述
①:worker进程个数,一般与物理机的CPU核数一致,这里的原因与nginx的进程模型以及nginx的事件处理模型相关。
②:worker进程之间的关系,进程之间是平等且相互独立的,一个具体的请求只能被一个worker进程处理,其他worker进程不会参与进来。
③:worker进程之间不会相互影响,一个worker进程挂掉不会影响别的worker进程,如CPU核数是4,worker进程正常是4个,当一个worker进程挂掉后(看进程是如何挂掉的,具体看进程收到什么类型的信号去挂掉进程,不是所有worker进程挂掉后都会重新启动),master进程能够监控到并主动启动一个新的worker进程。
4.master进程与worker进程工作过程简述
①master进程
master进程是不需要处理网络事件的,如从用户过来的请求是不需要master进程去亲自处理的,即为不负责具体的业务的执行,负责的事通过管理worker等子进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。
②worker进程
worker进程负责处理具体的网络事件,接收并处理用户的连接,接收连接后楷书读取请求、解析请求、处理请求,产生数据后在将数据返回给客户端,最后再讲连接断开,其中,worker进程是根据来自master的信号进行相关的操作。
信号 | 对应进程中全局标志位变量 | 意义 |
QUIT | ngx_quit | 优雅关闭worker进程 |
TERM或INT | ngx_terminate | 强制关闭进程 |
USR1 | ngx_reopen | 重新打开所有文件 |
WINCH | ngx_debug_quit |
目前没有实际的意义 |
HUP |
平滑读取配置文件 |
|
USR2 |
平滑升级 |
5.nginx进程模型优势
①worker进程之间相互独立,彼此之间互不影响,不需要加锁,节省了锁所需要的开销,并且编程和问题定位复杂度低。
②进程之间互不影响,避免了进程之间的相互影响,降低风险。
6.nginx的高并发
①异步与同步
同步:同步意味着执行需要一步步进行,在上一步操作完成之前无法进行下一步操作
异步:执行不用严格按照顺序一步步执行,下一步的操作不必等待上一步操作的完成
②阻塞与非阻塞
阻塞:进程在执行过程中,遇到如I/O操作,需要消耗比较长的时间,操作系统会将进程阻塞,将CPU控制权让给其他工作进程,这种调度方式为阻塞
非阻塞:进程在执行过程中,不管是否遇到如I/O需要消耗比较长时间的操作,都不会以阻塞的方式等待I/O操作完成或者数据返回,而只是将I/O请求发送给操作系统,继续执行下一跳语句。当操作系统完成I/O操作后,会通知执行I/O操作的进程,进程会在特定的时候处理这个事件。
nginx之所以可以实现高并发,得益于nginx采用异步非阻塞的方式。
异步非阻塞,使用epoll和大量的细节处优化,造就了nginx的非常好的高并发性能。
Nginx-->基础-->理论-->nginx进程模型的更多相关文章
- Nginx(十)-- 进程模型及工作原理
1.nginx进程模型 Nginx是一个master和worker的模型.master主要用来管理worker进程,master就比作老板,worker就是打工仔,master指挥worker来做事情 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- day63:Linux:nginx基础知识&nginx基础模块
目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...
- nginx源代码分析--框架设计 & master-worker进程模型
Nginx的框架设计-进程模型 在这之前,我们首先澄清几点事实: nginx作为一个高性能server的特点.事实上这也是全部的高性能server的特点,依赖epoll系统调用的高效(高效是相对sel ...
- nginx 基础文档
Nginx基础 1. nginx安装 2. nginx 编译参数详解 3. nginx安装配置+清缓存模块安装 4. nginx+PHP 5.5 5. nginx配置虚拟主机 6. ngi ...
- Nginx基础知识学习(安装/进程模型/事件处理机制/详细配置/定时切割日志)
一.Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使用稳定版本. 2.上传Nginx到Linux服务器. 3.安装依赖环 ...
- linux C++ 通讯架构(一)nginx安装、目录、进程模型
nginx是C语言开发的,号称并发处理百万级别的TCP连接,稳定,热部署(运行时升级),高度模块化设计,可以用C++开发. 一.安装和目录 1.1 前提 epoll,linux内核版本为2.6或以上 ...
- Nginx学习之六-nginx核心进程模型
一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个 ...
- Nginx的内部(进程)模型
nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式.nginx采用多进程的方式有诸多好处. (1)nginx在启动后 ...
随机推荐
- C# .NET 基本概念
1. private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在类的内部才可以访问. protected : 保护成员, ...
- IIS7 启用GZip压缩
GZip压缩通常会达到70%以上的压缩率,如果是手机Web这无疑会使网站的访问速度大大增加,无论是CSS合并.JS合并.图片合并都不如GZip压缩来得简单直接.如果一个网页是100K,那么启用GZip ...
- 并发读写缓存实现机制(一):为什么ConcurrentHashMap可以这么快?
大家都知道ConcurrentHashMap的并发读写速度很快,但为什么它会这么快?这主要归功于其内部数据结构和独特的hash运算以及分离锁的机制.做游戏性能很重要,为了提高数据的读写速度,方法之一就 ...
- php学习笔记
header("Content-Type:text/html;charset=utf-8");//设置中文请求中文 $host = "localhost";// ...
- 内容生成器:content、计数器、多列
一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不 ...
- 用CMake设置Visual Studio工程中预处理器定义值
构建VS工程时预处理值是不可缺少的,如动态库的导出配置等.在通过CMake构建VS工程时,可以通过CMake命令进行定义,下面讲三种应用. 字符集:默认装填下VS工程是多字节字符集,如果需要使用Uni ...
- 第一二九天上课 PHP 自制简单开发模板
构建基础架构 在项目文件夹(自定义)下创建 (1)核心目录:WQ (2)模板目录:MoBan (3)编译目录:BianYi (4)创建配置文件: config.ini.php <?php //获 ...
- DataSnap 2009 系列之三 (生命周期篇)
DataSnap 2009 系列之三 (生命周期篇) DataSnap 2009的服务器对象的生命周期依赖于DSServerClass组件的设置 当DSServer启动时从DSServerClass组 ...
- Time.MONTH及Calendar.MONTH 默认的月份为 0-11
Time.MONTH及Calendar.MONTH 默认的月份为 0-11 所以使用的时候要自己加1.
- 关于Onvif的event
昨天又仔细研究了一下camera的alarm功能,发现原来很简单,首先订阅一下,即create,拿到订阅号后直接pull,一旦收到信息就再次用订阅号pull.参考http://www.doc88.co ...