Nginx进程模型

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高度模块化设计使扩展功能更加简单模块化

相关文章
相关标签/搜索