zoukankan      html  css  js  c++  java
  • Nginx 多进程模型是如何实现高并发的?

    先总结:nginx是异步非阻塞工作方式,平时设置nginx的worker进程数时,设置的和CPU核数相同比较合适。

    我们平时在设置Nginx 的Worker进程数时,一般设置与CPU核数相同,这是为什么?为什么几个进程就可以实现高并发呢?

    因为进程数与并发数不存在很直接的关系,主要还是取决server采用的工作方式,如果一个server采用一个进程负责一个request请求的方式,那么进程数就是并发数。这样就是会有很多进程在等待网络传输,缺点题主大家应该都知道。

    nginx 的异步非阻塞工作方式正是利用了这点等待的时间,在需要等待的时候,这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。

    nginx是如何利用的呢,简单来说:同样的4个进程,如果采用一个进程负责一个request的方式,那么,同时进来4个request之后,每个进程就负责其中一个,直至会话关闭。期间,如果有第5个request进来了。就无法及时反应了,因为4个进程都没干完活呢,因此,一般有个调度进程,每当新进来了一个request,就新开个进程来处理。

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

    由于web server的工作性质决定了每个request的大部份生命都是在网络传输中,实际上花费在server机器上的时间片不多,这就是为什么几个进程就解决了高并发。

  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/redfire/p/11972545.html
Copyright © 2011-2022 走看看