nginx如何实现高并发

nginx如何实现高并发

简单来说,就是异步,非阻塞,使用了epoll和大量的底层代码优化。nginx

稍微详细一点展开的话,就是nginx的特殊进程模型和事件模型的设计。web

进程模型

nginx采用一个master进程,多个woker进程的模式。apache

  1. master进程主要负责收集、分发请求。当一个请求过来时,master拉起一个worker进程负责处理这个请求。
  2. master进程也要负责监控woker的状态,保证高可靠性
  3. woker进程通常设置为跟cpu核心数一致。nginx的woker进程跟apache不同。apche的进程在同一时间只能处理一个请求,因此它会开不少个进程,几百甚至几千个。而nginx的woker进程在同一时间能够处理额请求数只受内存限制,所以能够处理多个请求。

事件模型

nginx是异步非阻塞的。后端

每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,好比向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么傻等着,他会在发送完请求后,注册一个事件:“若是upstream返回了,告诉我一声,我再接着干”。因而他就休息去了。此时,若是再有request 进来,他就能够很快再按这种方式处理。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。服务器

web server的工做性质决定了每一个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片很少。这是几个进程就解决高并发的秘密所在。网络

参考资料:并发

  1. Nginx 多进程模型是如何实现高并发的? https://www.zhihu.com/question/22062795
相关文章
相关标签/搜索