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系列(三)--管理进程、多工作进程设计的更多相关文章

  1. Nginx之监控进程和工作进程

    1. 函数调用分析 在开启 master 的情况下,多进程模型的下的入口函数为 ngx_master_process_cycle,如下: int mian() { ... if (ngx_proces ...

  2. Nginx系列三 内存池的设计

    Nginx的高性能的是用非常多细节来保证,epoll下的多路io异步通知.阶段细分化的异步事件驱动,那么在内存管理这一块也是用了非常大心血.上一篇我们讲到了slab分配器,我们能够能够看到那是对共享内 ...

  3. Nginx学习笔记1-Nginx功能模块以及进程管理

    1.         功能 1.1.           功能描述 使用缓存加速反向代理,简单负载均衡和容错: 使用缓存机制加速远程FastCGI服务器的访问: 模块化结构: 基本的HTTP功能: 邮 ...

  4. Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...

  5. nginx第三天

    nginx架构分析 nginx模块化 nginx基于模块设计,每个模块是一个功能实现,分布式开发,团队协作 核心模块,标准http模块,可选http模块,邮件模块,第三方模块 编译后的源码目录  ob ...

  6. Nginx系列4之基础配置

    preface 公司跑得大多数是LNMP平台,所以借此机会多多了解下Nginx.下面主要说说Nginx下面几点: 防盗链 日志切割 负载均衡 虚拟主机 location匹配解释 substatus状态 ...

  7. Swoole 理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。

    测试的代码主要功能:开启一个tcp服务器.然后设置了管理进程和工作进程start的回调进行更名.设置了pid_file保存了服务端启动的mast进程. <?php //创建Server对象,监听 ...

  8. 【转】Nginx系列(三)--管理进程、多工作进程设计

    原博文出于:http://blog.csdn.net/liutengteng130/article/details/46700999  感谢! Nginx由一个master进程和多个worker进程组 ...

  9. nginx学习(三):nginx的进程模型

    概述 nginx 进程分为 master进程和work进程 1.打开配置文件查看,这里我修改为2 [root@xxx conf]# vim nginx.conf #user nobody; worke ...

随机推荐

  1. JWT和Spring Security集成

    通常情况下,把API直接暴露出去是风险很大的, 我们一般需要对API划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户对应的API (一)JWT是什么,为什么要使用它? 互联网服务离不开 ...

  2. HBase编程 API入门系列之scan(客户端而言)(5)

    心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. package zhouls.bigdata.HbaseProject.Test1; import javax.xml.trans ...

  3. 基于HTML5陀螺仪实现ofo首页眼睛移动效果

    最近用ofo小黄车App的时候,发现以前下方扫一扫变成了一个眼睛动的小黄人,觉得蛮有意思的,这里用HTML5仿一下效果. ofo眼睛效果 效果分析 从效果中不难看出,是使用陀螺仪事件实现的. 这里先来 ...

  4. Android-crop:漂亮的图片裁切工具

    主要特点 Gradle构建和AAR 现代化的UI 向后兼容到SDK 10 配置简单 示例项目 使用 首先,在你的 manifest 文件中申明 CropImageActivity : <acti ...

  5. hdu3488 / hdu3435 / hdu1853 最小费用最大流 圈 拆点

    题目大意: 在一个有向图中,求经过所有点的最小圈. 思路: (如果是用二分图的完美匹配来做,那么直接上模版就好了).http://www.cnblogs.com/Potato-lover/p/3991 ...

  6. 腾讯云TrustAsia DV SSL CA证书的申请及使用

    1.证书申请及管理     对于已经拥有域名及公网服务器的用户,可以通过腾讯云申请TrustAsia DV SSL CA证书,证书申请流程包含填写基本信息和域名认证两步,非常清晰和简单,没有什么需要过 ...

  7. Win10 UWP Tile Generator

    图标生成器 https://marketplace.visualstudio.com/items?itemName=shenchauhan.UWPTileGenerator 备份地址: http:// ...

  8. PythonOpencv-分类器—SVM,KNearest,RTrees,Boost,MLP

    原文链接:http://blog.csdn.net/gjy095/article/details/9243153 上一篇文章,不是很详细,这一篇解释的清晰些,请访问原始链接. Rtrees介绍!参考链 ...

  9. Find Bugs

    为什么没有早点知道有这么好用的插件呢?

  10. otool -l 可执行文件结构

    otool -l /Users/zzf073/Desktop/FqlMerchantX /Users/zzf073/Desktop/FqlMerchantX: Mach header magic cp ...