Nginx 是如何实现高并发的?

本文阅读 3 分钟
首页 知识库 正文

如果⼀个 server 采⽤⼀个进程(或者线程)负责⼀个 request 的⽅式,那么进 程数就是并发数。那么显⽽易⻅的,
就是会有很多进程在等待中。等什么?最 多的应该是等待⽹络传输。其缺点胖友应该也感觉到了,此处不述。
⽽ Nginx 的异步⾮阻塞⼯作⽅式正是利⽤了这点等待的时间。在需要等待的 时候,这些进程就空闲出来待命了。
因此表现为少数⼏个进程就解决了⼤量的 并发问题。
Nginx 是如何利⽤的呢,简单来说:同样的 4 个进程,如果采⽤⼀个进程负 责⼀个 request 的⽅式,那么,同
时进来 4 个 request 之后,每个进程就 负责其中⼀个,直⾄会话关闭。期间,如果有第 5 个 request 进来了。
就⽆ 法及时反应了,因为 4 个进程都没⼲完活呢,因此,⼀般有个调度进程,每当 新进来了⼀个 request ,就
新开个进程来处理。
Nginx 不这样,每进来⼀个 request ,会有⼀个 worker 进程去处理。但不 是全程的处理,处理到什么程度
呢?处理到可能发⽣阻塞的地⽅,⽐如向上游 (后端)服务器转发 request ,并等待请求返回。那么,这个处理
的 worker 不会这么傻等着,他会在发送完请求后,注册⼀个事件: “如果 upstream 返 回了,告诉我⼀声,我再
接着⼲”。于是他就休息去了。此时,如果再有 request 进来,他就可以很快再按这种⽅式处理。⽽⼀旦上游服务
器返回了, 就会触发这个事件, worker 才会来接⼿,这个 request 才会接着往下⾛。 这就是为什么说, Nginx
基于事件模型。
由于 web server 的⼯作性质决定了每个 request 的⼤部份⽣命都是在⽹络 传输中,实际上花费在 server 机器
上的时间⽚不多。这是⼏个进程就解决⾼ 并发的秘密所在。即:
webserver 刚好属于⽹络 IO 密集型应⽤,不算是计算密集型。异步,⾮阻 塞,使⽤ epol- ,和⼤量细节处的
优化,也正是 Nginx 之所以然的技术基 ⽯。

解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

《网感:在网络世界受人欢迎的基本能力》azw3+mobi+epub
« 上一篇 08-02
ZooKeeper ⼀般都有哪些使⽤场景?
下一篇 » 08-02

发表评论