Nginx进程模型

2018-10-17 10:30:34 935 思小齐 思小齐

1.Nginx是多进程 or 多线程 ?

通常情况下:Nginx采用多进程模式,每个woker进程拥有一个主线程去响应处理多个用户请求;同时Nginx支持使用AIO线程池去读取和发送大文件,避免woker进程被堵塞。

2.Nginx多进程单线程

每个woker进程拥有一个主线程,在epoll支持下,采用异步非阻塞方式来处理请求,从而实现高并发;相对于多线程来说:每个请求占用量小,没有上下文切换带来的开销,事件处理十分轻量。
备注:httpd工作方式通常为多线程,每个用户请求独占一个线程,当并发数到达上千的时候,同时会有上千个线程在处理请求,线程带来的内存占用非常大,线程的上下文切换带来的cpu开销也很大

3.Nginx进程设计

Nginx主要采用Master/Woker进程设计的方式:Master进程主要用来管理Worker进程生命周期;Woker进程主要去处理用户请求。

1.利用多核:多woker进程能充分利用多核系统带来的并发处理能力
2.woker进程高可用:当woker进程挂掉后,master进程能够重新申请创建新的woker进程
3.负载均衡:woker进程间可以通信,从而一个请求的到来可以协商分配到负载较低的woker进程上去处理

备注:我们通常会设置woker进程数量和CPU核数保持一致:CPU亲和性或绑定woker进程到指定cpus上可以避免进程上下文切换带来的开销、cpu资源竞争及cache失效等问题

4.对比Apache

轻量级:Nginx占用更少的内存及资源
抗并发:Apache是同步阻塞型,在高并发下Nginx能保持低消耗高性能
高度模块化:Nginx高度模块化设计使扩展功能更加简单