Nginx的内部(进程)模型

nginx是以多进程的方式来工作的。当然nginx也是支持多线程的方式的,仅仅是我们主流的方式还是多进程的方式,也是nginx的默认方式。nginx採用多进程的方式有诸多优点。 
(1)nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包括:接收来自外界的信号,向各worker进程发送信号,监控 worker进程的执行状态,当worker进程退出后(异常情况下),会自己主动又一次启动新的worker进程。而主要的网络事件。则是放在worker进程中来处理了 。多个worker进程之间是对等的,他们同等竞争来自client的请求。各进程互相之间是独立的 。一个请求,仅仅可能在一个worker进程中处理,一个worker进程,不可能处理其他进程的请求。

worker进程的个数是能够设置的,一般我们会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的 。

(2)Master接收到信号以后如何进行处理(./nginx -s reload )?

首先master进程在接到信号后,会先又一次载入配置文件。然后再启动新的进程。并向全部老的进程发送信号,告诉他们能够光荣退休了。

新的进程在启动后,就開始接收新的请求,而老的进程在收到来自master的信号后,就不再接收新的请求,并且在当前进程中的全部未处理完的请求处理完毕后,再退出 .
(3)worker进程又是如何处理请求的呢?我们前面有提到。worker进程之间是平等的。每一个进程,处理请求的机会也是一样的。当我们提供80port的http服务时。一个连接请求过来,每一个进程都有可能处理这个连接,怎么做到的呢?首先,每一个worker进程都是从master进程fork过来,在master进程里面。先建立好须要listen的socket之后。然后再fork出多个worker进程,这样每一个worker进程都能够去accept这个socket(当然不是同一个socket,仅仅是每一个进程的这个socket会监控在同一个ip地址与port,这个在网络协议里面是同意的)。一般来说。当一个连接进来后。全部在accept在这个socket上面的进程。都会收到通知。而仅仅有一个进程能够accept这个连接,其他的则accept失败,这是所谓的惊群现象。

当然,nginx也不会视而不见,所以nginx提供了一个accept_mutex这个东西,从名字上。我们能够看这是一个加在accept上的一把共享锁。有了这把锁之后,同一时刻,就仅仅会有一个进程在accpet连接,这样就不会有惊群问题了。accept_mutex是一个可控选项,我们能够显示地关掉。默认是打开的。当一个worker进程在accept这个连接之后,就開始读取请求。解析请求。处理请求,产生数据后,再返回给client,最后才断开连接,这样一个完整的请求就是这种了。我们能够看到,一个请求。全然由worker进程来处理。并且仅仅在一个worker进程中处理。 
(4)nginx採用这种进程模型有什么优点呢?採用独立的进程,能够让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则非常快又一次启动新的worker进程。当然,worker进程的异常退出。肯定是程序有bug了,异常退出。会导致当前worker上的全部请求失败,只是不会影响到全部请求,所以减少了风险。当然,优点还有非常多,大家能够慢慢体会。 
(5)有人可能要问了。nginx採用多worker的方式来处理请求,每一个worker里面仅仅有一个主线程,那能够处理的并发数非常有限啊。多少个worker就能处理多少个并发。何来高并发呢?非也,这就是nginx的高明之处,nginx採用了异步非堵塞的方式来处理请求。也就是说,nginx是能够同一时候处理成千上万个请求的 .对于IISserver每一个请求会独占一个工作线程。当并发数上到几千时,就同一时候有几千的线程在处理请求了。

这对操作系统来说。是个不小的挑战,线程带来的内存占用非常大。线程的上下文切换带来的cpu开销非常大。自然性能就上不去了。而这些开销全然是没有意义的。

我们之前说过,推荐设置worker的个数为cpu的核数,在这里就非常easy理解了,很多其他的worker数,仅仅会导致进程来竞争cpu资源了,从而带来不必要的上下文切换。

并且,nginx为了更好的利用多核特性,提供了cpu亲缘性的绑定选项。我们能够将某一个进程绑定在某一个核上。这样就不会由于进程的切换带来cache的失效。

时间: 2024-10-09 17:20:25

Nginx的内部(进程)模型的相关文章

nginx源码分析--master和worker进程模型

一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个较为完整的整体框架结构如图所示: 二.核心进程模型 启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程. nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,没有监控进程. Nginx的核心进程模型框图如下: master进程 监控进程充当整个进

【nginx】【转】Nginx核心进程模型

一.Nginx整体架构 正常执行中的nginx会有多个进程,最基本的有master process(监控进程,也叫做主进程)和woker process(工作进程),还可能有cache相关进程. 一个较为完整的整体框架结构如图所示: 二.核心进程模型 启动nginx的主进程将充当监控进程,而由主进程fork()出来的子进程则充当工作进程. nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,没有监控进程. Nginx的核心进程模型框图如下: master进程 监控进程充当整个进

菜鸟nginx源码剖析架构篇(二) nginx进程模型

Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:Nov 17th, 2014 1.nginx进程模型 nginx采用的是多进程模型,典型的master-worker方式,采用一个master process(监控进程,也叫做主进程)和多个woker process(工作进程)的设计方式,此外,还有1个可选的chache manager和 1 个可选的cache loader进程.

Nginx 启动原理与模型

Nginx 在启动后,在 unix 系统中会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程. master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程. 多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的.worker 进程的个数是可

nginx源码分析--高性能服务器开发 常见进程模型

1.高性能服务器 对一个高性能服务器来说,处理速度快和资源占用小是典型特性,尤其是当服务器遇到C10K问题的时候(网络服务器在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为C10K问题).要做到处理速度足够快,其并发模型的设计相当关键,而要做到资源尤其是内存资源的占用少,就要依赖于其资源分配和资源管理的方案设计. 服务器的并发模型设计是网络编程中很关键的一个部分,服务器的并发量取决于两个因素,一个是提供服务的进程数量,另外一个是每个进程可同时处理的并发连接数量.相应的,服务器

透过现象看本质——回头再看Nginx(进程模型、异步非阻塞、源码目录结构)

透过现象看本质--回头再看Nginx Nginx的进程模型 ? 使用过nginx的朋友都知道nginx的性能很高,而其原因可能少有人知.首先,nginx的架构就奠定了其高性能的基础.那么就先来看看nginx的基础架构吧,如下图所示:(不能完全理清楚所有内容也没关系,因为本小节讲述的主要内容是Nginx的进程模型) ? 本小节先来说说Nginx基础架构中的进程模型: ? 所谓进程模型,即Nginx响应请求或服务时程序运行(机器执行指令集)的方式,一般在nginx服务启动后,在Unix系统中会以da

nginx进程模型 master/worker

nginx有两类进程,一类称为master进程(相当于管理进程),另一类称为worker进程(实际工作进程).启动方式有两种: (1)单进程启动:此时系统中仅有一个进程,该进程既充当master进程的角色,也充当worker进程的角色. (2)多进程启动:此时系统有且仅有一个master进程,至少有一个worker进程工作. master进程主要进行一些全局性的初始化工作和管理worker的工作:事件处理是在worker中进行的. 首先简要的浏览一下nginx的启动过程,如下图: 2.实现原理

nginx源码分析--框架设计 & master-worker进程模型

Nginx的框架设计-进程模型 在这之前,我们首先澄清几点事实: nginx作为一个高性能服务器的特点,其实这也是所有的高性能服务器的特点,依赖epoll系统调用的高效(高效是相对select/poll这些系统调用的,底层有一个链表和红黑树,避免了轮询,减少了用户空间和系统空间之间的数据传递等),非阻塞(所有的操作都是非阻塞,这样),多进程(master-slave进程模型),这些事实使得nginx成为一个高性能服务器的前提条件. 既然作为一个软件(http服务器),相对于一个网络库而言肯定有更

Nginx(十)-- 进程模型及工作原理

1.nginx进程模型 Nginx是一个master和worker的模型.master主要用来管理worker进程,master就比作老板,worker就是打工仔,master指挥worker来做事情.下图是nginx的进程模型: master进程: 1.接收外界的信号,例如:kill -QUIT,kill -HUP   kill -HUP 重新加载配置文件,然后重新启动新的worker进程,老的还在运行,同时,向老的worker进程发送退休命令,老的worker进程将原有的请求处理完之后,就退