服务器如何异步处理请求

Posted

技术标签:

【中文标题】服务器如何异步处理请求【英文标题】:How a server handles requests asynchronously 【发布时间】:2018-06-23 21:59:48 【问题描述】:

我知道这是基本的,但无法连接。

假设一个 django-server(托管在具有 3gb ram 和 1vCPU 和 nginx 的 linux 系统上)正在处理一个大约需要 1700 毫秒的请求(比如 R1)。

在 100 毫秒执行期间,请求 R2 进来。

这里,服务器已经忙于处理 R1。

那么 R2 是否必须等待 1700 毫秒 - 100 毫秒 = 1600 毫秒?

这是如何处理的?

是否有类似实例(如在 aws 中)可以解决这个问题?

【问题讨论】:

什么是django-server?您使用manage.py runserver 启动的那个?我的意思是 - 这一切都取决于服务器是什么。例如runserver 将一次处理一个请求 是的..对不起,轻罪,假设它在 nginx 上运行 您可能想在Nginx performance 上阅读此主题。但是afaik,这与django无关。 Nginx 是处理请求的那个。 Django 已准备好开箱即用地处理并发请求 【参考方案1】:

首先,1700 毫秒对于请求来说太长了;如果您的视图需要很长时间才能完成,那么您就有问题了。

其次,部署 Django 的所有方法都涉及某种多进程处理。通常这是通过操作系统进程完成的,尽管它也可能涉及线程。无论哪种方式,它都由您的服务器处理,例如 gunicorn、uWSGI 或 Apache/mod_wsgi。

【讨论】:

IMO,这是一个非常基本的答案,缺乏重要的细节。对于询问服务器如何异步处理请求的问题,我希望得到更详细的答案。 ATM,对我来说似乎更像是一条评论。

以上是关于服务器如何异步处理请求的主要内容,如果未能解决你的问题,请参考以下文章

架构设计|异步请求如何同步处理?

如何异步处理 WCF 的传入调用?

tornado异步web请求

用户事务处理中同步请求与异步请求区别

如何保证异步请求中的正确顺序

(05)使用DeferredResult多线程异步处理请求