Nginx系列(三)--管理进程、多工作进程设计
Nginx由一个master进程和多个worker进程组成,但master进程或者worker进程中并不会再创建线程。
一、master进程和worker进程的作用
master进程
不须要处理网络事件。不负责业务的运行,仅仅会通过管理worker等子进程来实现重新启动服务、平滑升级、更换日志文件、配置文件实时生效等功能。
master是通过fork系统调用子进程来实现和子进程的通信。
worker进程
用来处理master进程fork过来的请求
worker进程是通过处理信号来实现和master通信的
====================================================================================
二、信号的处理过程
Master进程接收到信号是如何进行处理的?
master进程接收到信号后,会先又一次载入配置文件,然后再启动新的进程,并向全部老的进程发送信号,告诉他们能够光荣退休了。
新的进程在启动后,就開始接受新的请求,而老的进程在收到来自master信号后。就不再接收新的请求,而且在当前进程中的全部未处理完的请求处理完毕后再退出。
Worker进程接收到信号是如何进行处理的?
首先。worker进程之间是平等的,每一个进程,处理请求的机会也是一样的。当我们提供80port的http服务时,一个连接请求过来,每一个进程都有可能处理这个连接,怎么做到的呢?首先。每一个worker进程都是从master进程fork过来的,在master进程里面,先建立好须要listen的socket之后。然后再fork出多个worker进程。这样每一个worker进程都能够去接受这个socket。一般来说,当一个连接进来后,全部在accept这个socket上面的进程都会收到通知,而仅仅有一个进程能够接受这个连接,其它的则accept失败。这就是所谓的惊群现象。
那么为了解决问题。Nginx提供了一个accept_mutex(可选项,默认打开)。
这是一个加在accept上的一把共享所。有了这把锁之后,同一时刻。就会仅仅有一个进程在accept连接,这样就不会有惊群问题了。
当一个worker进程在accept这个连接之后,就開始读取请求。解析请求,处理请求。产生数据后,再返回给client。最后才断开连接。
一个请求,全然由worker进程来处理。并且仅仅在一个worker进程中处理。
====================================================================================
三、这样设计的长处
1、利用多核系统的并发处理能力
如今操作系统都是多核CPU,假设一直是仅仅有一个进程在工作,那么浪费资源,假设是worker进程间地位不平等势必造成进程瓶颈问题,Nginx为了避免这个问题,设计worker间进程平等。另外,worker数与cpu核数一致。则会达到CPU资源的充分利用,假设worker数多于cpu核数,势必造成资源的竞争;若小于cpu核数。势必造成资源浪费。提高网络性能。减少请求时延。
2、负载均衡
多个worker之间通过进程通信来实现负载均衡。即当一个请求到来时,更easy分配到负载较轻的worker进程中处理。这将减少请求的时延。并在一定程度上提高网络性能
3、管理进程负责监控工作进程的状态,并负责管理其行为
这样做的优点是:
a.管理进程不会占用多少系统资源
b.管理进程负责监控工作进程状态,假设某个工作进程死掉,管理进程负责创建出新的工作进程,避免系统性能下降。
提高了系统的可靠性。
c.管理进程支持Nginx服务执行中的程序升级、配置项改动等,使得动态可扩展性、动态定制性、动态进化性较easy实现。
Nginx系列(三)--管理进程、多工作进程设计的更多相关文章
- Nginx之监控进程和工作进程
1. 函数调用分析 在开启 master 的情况下,多进程模型的下的入口函数为 ngx_master_process_cycle,如下: int mian() { ... if (ngx_proces ...
- Nginx系列三 内存池的设计
Nginx的高性能的是用非常多细节来保证,epoll下的多路io异步通知.阶段细分化的异步事件驱动,那么在内存管理这一块也是用了非常大心血.上一篇我们讲到了slab分配器,我们能够能够看到那是对共享内 ...
- Nginx学习笔记1-Nginx功能模块以及进程管理
1. 功能 1.1. 功能描述 使用缓存加速反向代理,简单负载均衡和容错: 使用缓存机制加速远程FastCGI服务器的访问: 模块化结构: 基本的HTTP功能: 邮 ...
- Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...
- nginx第三天
nginx架构分析 nginx模块化 nginx基于模块设计,每个模块是一个功能实现,分布式开发,团队协作 核心模块,标准http模块,可选http模块,邮件模块,第三方模块 编译后的源码目录 ob ...
- Nginx系列4之基础配置
preface 公司跑得大多数是LNMP平台,所以借此机会多多了解下Nginx.下面主要说说Nginx下面几点: 防盗链 日志切割 负载均衡 虚拟主机 location匹配解释 substatus状态 ...
- Swoole 理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。
测试的代码主要功能:开启一个tcp服务器.然后设置了管理进程和工作进程start的回调进行更名.设置了pid_file保存了服务端启动的mast进程. <?php //创建Server对象,监听 ...
- 【转】Nginx系列(三)--管理进程、多工作进程设计
原博文出于:http://blog.csdn.net/liutengteng130/article/details/46700999 感谢! Nginx由一个master进程和多个worker进程组 ...
- nginx学习(三):nginx的进程模型
概述 nginx 进程分为 master进程和work进程 1.打开配置文件查看,这里我修改为2 [root@xxx conf]# vim nginx.conf #user nobody; worke ...
随机推荐
- docker(二):CentOS安装docker
前置条件 1. CentOS 7:要求系统为64位.系统内核版本为 3.10 以上 使用如下命令,查看机器配置 lsb_release -a uname -a 2. 关闭防火墙 systemctl s ...
- C#缓存
最近在学习缓存的知识,博客园中的 缓存资料 觉得信息不错值得学习
- 登录linux,输入ls显示anaconda-ks.cfg cobbler.ks ....., 原因在于root@ ~ / 区别
今天登录linux测试机,想要创建目录,ls的时候,找不到之前的的目录,才发现是目录不对的问题. 首先,先要弄清楚 [root@330c353813ea ~] 和 [root@330c353813ea ...
- [OpenWrt]安装mjpg-streamer
安装mjpg-streamer 远程监控基本上是wifi小车的一个必备功能了.摄像头我用的是奥尼百脑通 D881,这个要100左右. 确认安装了以下软件: kmod-usb2 kmod-video-u ...
- 解决java float double 浮点型参与计算失精度
本人前段时间做一个社区电商应用,发现了一个 天坑 ...................让我哭会 . 下面听听我的踩坑之路吧 ,电商肯定跟¥打交道了,计算少不了的.由于本人太菜 单纯的以为 fl ...
- mysql简单语句
创建名为user的数据库: create database user; 显示所有数据库: show databases; 选择名为user的数据库: use user; 显示所有表: show tab ...
- 可以忽略的:BASH:/:这是一个目录
linux Ubuntu 14.04 在使用VIM编辑 /etc/profile 保存之后,出现了这个问题 其实,这个是可以忽略不计的问题,字符编码问题
- 了解权限控制框架shiro 之实际应用.
Apache Shiro 1.权限控制分为 a.粗粒度 URL 级别权限控制 b.细粒度方法级别权限控制 2.使用shiro进行权限控制主要有四种主要方式 : a. 在程序中 通过 Subje ...
- CSS读书笔记(1)---选择器和两列布局
(1)CSS选择器优先权选择. 优先权从大到小的选择如下: 标有!important关键字声明的属性 HTML中的CSS样式属性 <div style="color:red" ...
- 基于fullpage的自动播放,手动播放,暂停页面的功能
功能如下: 1.默认加载方式为“自动播放 ”方式,即从第1屏至第5屏 页面循环加载显示,每屏每次仅显示1个页面,页面间停留时间为“10”秒2.手动播放过程中,按数字键“1”-“5”,将直接切到指定页面 ...