【转自】http://blog.chinaunix.net/uid-22312037-id-3974068.html

一、进程模型
        Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构。与Memcached的经典多线程模型相比,Nginx是经典的多进程模型。Nginx启动后以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程,具体如下图:


图1 Nginx多进程模型

master进程主要用来管理worker进程,具体包括如下4个主要功能:
        (1)接收来自外界的信号。
        (2)向各worker进程发送信号。
        (3)监控woker进程的运行状态。
        (4)当woker进程退出后(异常情况下),会自动重新启动新的woker进程。
        woker进程主要用来处理网络事件,各个woker进程之间是对等且相互独立的,它们同等竞争来自客户端的请求,一个请求只可能在一个woker进程中处理,woker进程个数一般设置为机器CPU核数。

二、进程控制
        对Nginx进程的控制主要是通过master进程来做到的,主要有两种方式:
        (1)手动发送信号
        从图1可以看出,master接收信号以管理众woker进程,那么,可以通过kill向master进程发送信号,比如kill -HUP pid用以通知Nginx从容重启。所谓从容重启就是不中断服务:master进程在接收到信号后,会先重新加载配置,然后再启动新进程开始接收新请求,并向所有老进程发送信号告知不再接收新请求并在处理完所有未处理完的请求后自动退出。
        (2)自动发送信号
        可以通过带命令行参数启动新进程来发送信号给master进程,比如./nginx -s reload用以启动一个新的Nginx进程,而新进程在解析到reload参数后会向master进程发送信号(新进程会帮我们把手动发送信号中的动作自动完成)。当然也可以这样./nginx -s stop来停止Nginx。

三、网络事件
         Nginx采用异步非阻塞的方式来处理网络事件,类似于Libevent,具体过程如下图:


图2 Nginx网络事件

master进程先建好需要listen的socket后,然后再fork出多个woker进程,这样每个work进程都可以去accept这个socket。当一个client连接到来时,所有accept的work进程都会受到通知,但只有一个进程可以accept成功,其它的则会accept失败。Nginx提供了一把共享锁accept_mutex来保证同一时刻只有一个work进程在accept连接,从而解决惊群问题。当一个worker进程accept这个连接后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完成的请求就结束了。

转载于:https://www.cnblogs.com/Fredric-2013/p/4549546.html

【转】 Nginx深入详解之多进程网络模型相关推荐

  1. Nginx Rewrite详解

    Nginx Rewrite详解 引用链接:http://blog.cafeneko.info/2010/10/nginx_rewrite_note/ 原文如下: 在新主机的迁移过程中,最大的困难就是W ...

  2. Nginx 架构详解

    Nginx 架构详解 nginx的下篇将会更加深入的介绍nginx的实现原理.上一章,我们了解到了如何设计一个高性能服务器,那这一章将会开始讲解,nginx是如何一步一步实现高性能服务器的. Ngin ...

  3. nginx配置详解1

    Nginx 配置文件详解 user nginx ; #用户 worker_processes 8; #工作进程,根据硬件调整,大于等于cpu核数 error_log logs/nginx_error. ...

  4. 【python】详解multiprocessing多进程-Pool进程池模块(二)

    [python]详解multiprocessing多进程-process模块(一) [python]详解multiprocessing多进程-Pool进程池模块(二) [python]详解multip ...

  5. Nginx配置详解/代理服务的配置说明

    Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...

  6. Nginx rewrite 详解

    Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关 ...

  7. 配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解)

    配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解) 免费领取满减阿里云红包 项目名称:[域名解析–隐形URL转发]–centos 7.3 环境: 阿里云服务器之上有多个tomc ...

  8. 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少

    反向代理与负载均衡配置 接下来介绍Nginx的重要功能:反向代理+负载均衡.单体Nginx的性能虽然不错,但也是有瓶颈的.打个比方:用户请求发起一个请求,网站显示的图片量比较大,如果这个时候有大量用户 ...

  9. 本文来深入学习Nginx/OpenResty详解,Nginx到底是个什么鬼

    Nginx/OpenResty详解 Nginx(或OpenResty)在生产场景中使用的广泛程度已经到了令人咂舌的地步.无论其实际的市场占用率如何,以笔者这些年所经历的项目来看,其使用率为100%. ...

最新文章

  1. 常用的几种大数据架构剖析
  2. unity vscode没有智能提示_GAMES101课程环境搭建(Win10+VSCode)
  3. web sqlite linux,基于嵌入式Linux和Sqlite的Web服务器的研究及应用
  4. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)
  5. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树
  6. 自学c语言后的感受,一路走来,浅谈c语言的学习感想
  7. Ubuntu安装 Killer Wireless-AC 1550 Wireless 无线网卡驱动
  8. matlab计算abc三相短路电流_不用到处问别人了,关于变压器的相关计算公式,都在这里!收藏好...
  9. 如何将b站视频从手机传输到电脑上
  10. 电梯液晶显示控制方案
  11. 盘点wps函数公式大全
  12. 怎么把PDF文件转换成Word?三招教你轻松搞定
  13. AD根据Primitives进行敷铜
  14. Python可视化案例:Mutual Funds和ETFs对比
  15. 零知识证明:STARKs vs SNARKs
  16. 电脑很大,笔记本电脑响声很大怎么回事
  17. 数据结构:单链表(水浒传英雄操作为例)+单链表面试题
  18. 拉盖尔多项式 matlab,类氢原子的定态波函数
  19. 一个顾客买了价值x元的商品,并将y元的钱交给售货员。售货员希望用张数最少的钱币找给顾客。 无论买商品的价值x是多大,找给他的钱最多需要以下六种币值:50,20,10,5,2,1
  20. uniapp中video标签设置controls显示问题

热门文章

  1. python 斐波拉契递归 尾递归 备忘录 动态规划 迭代
  2. android中TextView显示中文发生乱码的问题
  3. 实现BFS之“营救”
  4. 贪心算法--加油站问题
  5. time,atoi,strstr
  6. Hystrix 熔断降级
  7. jvm十五:java虚拟机内存图
  8. java多线程间的通讯
  9. oracle: to_char,to_date
  10. 前端一HTML:二: html开发工具