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 ...
随机推荐
- JWT和Spring Security集成
通常情况下,把API直接暴露出去是风险很大的, 我们一般需要对API划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户对应的API (一)JWT是什么,为什么要使用它? 互联网服务离不开 ...
- HBase编程 API入门系列之scan(客户端而言)(5)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. package zhouls.bigdata.HbaseProject.Test1; import javax.xml.trans ...
- 基于HTML5陀螺仪实现ofo首页眼睛移动效果
最近用ofo小黄车App的时候,发现以前下方扫一扫变成了一个眼睛动的小黄人,觉得蛮有意思的,这里用HTML5仿一下效果. ofo眼睛效果 效果分析 从效果中不难看出,是使用陀螺仪事件实现的. 这里先来 ...
- Android-crop:漂亮的图片裁切工具
主要特点 Gradle构建和AAR 现代化的UI 向后兼容到SDK 10 配置简单 示例项目 使用 首先,在你的 manifest 文件中申明 CropImageActivity : <acti ...
- hdu3488 / hdu3435 / hdu1853 最小费用最大流 圈 拆点
题目大意: 在一个有向图中,求经过所有点的最小圈. 思路: (如果是用二分图的完美匹配来做,那么直接上模版就好了).http://www.cnblogs.com/Potato-lover/p/3991 ...
- 腾讯云TrustAsia DV SSL CA证书的申请及使用
1.证书申请及管理 对于已经拥有域名及公网服务器的用户,可以通过腾讯云申请TrustAsia DV SSL CA证书,证书申请流程包含填写基本信息和域名认证两步,非常清晰和简单,没有什么需要过 ...
- Win10 UWP Tile Generator
图标生成器 https://marketplace.visualstudio.com/items?itemName=shenchauhan.UWPTileGenerator 备份地址: http:// ...
- PythonOpencv-分类器—SVM,KNearest,RTrees,Boost,MLP
原文链接:http://blog.csdn.net/gjy095/article/details/9243153 上一篇文章,不是很详细,这一篇解释的清晰些,请访问原始链接. Rtrees介绍!参考链 ...
- Find Bugs
为什么没有早点知道有这么好用的插件呢?
- otool -l 可执行文件结构
otool -l /Users/zzf073/Desktop/FqlMerchantX /Users/zzf073/Desktop/FqlMerchantX: Mach header magic cp ...