nginx如何实现高并发

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

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

进程模型

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

  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

最新文章

  1. 返水bug-中澳
  2. HTML标签-【fieldset】-fieldset
  3. 从BATS交易所获取空头头寸
  4. C#移动无标题栏窗体的四种代码
  5. HDU4831&&4832&&4834
  6. How Old Are You?
  7. 后台地址报错:Service Unavailable
  8. 用Doxygen生成文档
  9. php语言基础学习笔记
  10. 原生JS Ajax 请求
  11. [Boost] 1.57.0 with VS2013 + Intel compiler
  12. 宝塔面板设置腾迅COS自动备份网站
  13. POJ 1848 Tree 树形DP
  14. .Net 之 RPC 框架之Hprose(远程调用对象)
  15. spring ref &history&design philosophy
  16. xmal中的渐变
  17. linux 的常用命令---------第十阶段
  18. window搭建python环境
  19. go语言 defer 高级
  20. spark or sparkstreaming的内存泄露问题?

热门文章

  1. python基础(二)列表与字典
  2. freemaker超详细 讲解 配置
  3. sqlserver 组内排序
  4. java任务中嵌套任务
  5. SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase] 错误
  6. mui.fire()触发自定义事件
  7. Java程序员职业生涯规划
  8. ABP框架系列之二:(Entity Framework Core-实体核心框架)
  9. POI SXSSFWorkbook 读取模板 存在公式解决
  10. <Listener>servletContextListener、httpSessionListener和servletRequestListener使用整理