gpt4 book ai didi

c - 一个 nginx worker 进程是同时处理两个请求还是一个一个处理?

转载 作者:太空狗 更新时间:2023-10-29 15:41:21 24 4
gpt4 key购买 nike

The really cool part about the filter chain is that each filter doesn't wait for the previous filter to finish; it can process the previous filter's output as it's being produced, sort of like the Unix pipeline. (from here)

我猜上面说的是在每个过滤器的末尾这样的代码:

if (!chain_contains_last_buffer)
return ngx_http_next_body_filter(r, in);

也就是说,nginx 将过滤器一个接一个地链接起来。但是由于它在每个过滤器的末尾,它必须等到当前过滤器完成。我不明白 nginx 如何设法使 每个过滤器不等待前一个过滤器完成

所以上面是关于nginx过滤器的并发度,接下来是关于nginx请求处理的并发度:

我们知道 nginx 使用 epoll 来处理请求:

events = epoll_wait(ep, event_list, (int) nevents, timer);
for (i = 0; i < events; i++) {
...
rev->handler(rev);
}

使用上面的代码,我不认为 nginx 可以同时处理两个请求,它只能一个接一个地处理(每个 handler 完成它的工作足够快,所以下一个请求得到很好的处理很快),对吧?

还是我遗漏了什么问题?

最佳答案

有一种方法可以对此进行测试。编写一个休眠的过滤器,并在过滤器链中使用它。然后测试是否可以让 nginx 在前一个请求休眠时为请求提供服务。

然后再次运行测试,但这次不要让过滤器休眠,使用选择超时让它等待:

/* wait 1.5 secs */
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 500000;
select(0, NULL, NULL, NULL, &tv);

关于c - 一个 nginx worker 进程是同时处理两个请求还是一个一个处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6354635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com