【发布时间】:2015-04-29 17:04:26
【问题描述】:
NGNIX 使用 epoll 通知来知道套接字上是否有任何数据要读取。
假设: 服务器有两个请求。 nginx 收到关于这两个请求的通知并开始:
收到第一个请求
解析ist标头
检查边界(体型)
向上游服务器发送第一个请求
等
nginx是单线程的,一次只能做一个操作。
但是第二个请求会发生什么?
nginx在解析第一个请求时是否收到第二个请求?
还是在第一个请求完成后开始处理第二个请求?
或者其他我不明白的东西。
如果 1. 是正确的,那么我不明白它是如何在单个线程中实现的。
如果2.是正确的,那么nginx怎么会这么快?因为 nginx 按顺序处理所有传入的请求。在任何给定时间,只能处理一次请求。
请帮助我理解。 谢谢
【问题讨论】:
-
可能是相关的:unix 套接字被证明比使用 TCP 慢。还有一件事:nginx 是单线程的,但创建的工作人员很少,默认情况下是 4 个,你的问题是关于一个特定工作人员内部发生了什么?
-
在这里查看我的答案以获得解释:stackoverflow.com/a/19324665/362536
标签: sockets asynchronous nginx epoll