Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 为什么gunicorn的多线程时间不等于单个处理时间?_Multithreading_Performance_Time_Gunicorn - Fatal编程技术网

Multithreading 为什么gunicorn的多线程时间不等于单个处理时间?

Multithreading 为什么gunicorn的多线程时间不等于单个处理时间?,multithreading,performance,time,gunicorn,Multithreading,Performance,Time,Gunicorn,我使用gunicorn允许我的Flask rest API同时处理多个请求。我的gunicorn配置中有5个worker(2x$(NUM_CORES)+1)。我测量了响应时间,以下是我的结果: 1个请求的响应时间为20秒 如果我同时发送5个请求,每个请求的响应时间为55秒 如果我同时发送6个请求,前5个请求的响应时间为55s,第6个请求的响应时间为75s(=55+20) 我不明白为什么5个请求同时需要55秒。我预计响应时间为20秒,对于1个请求,我认为它将同时并行处理5个请求 55秒几乎是我

我使用gunicorn允许我的Flask rest API同时处理多个请求。我的gunicorn配置中有5个worker(2x$(NUM_CORES)+1)。我测量了响应时间,以下是我的结果:

  • 1个请求的响应时间为20秒
  • 如果我同时发送5个请求,每个请求的响应时间为55秒
  • 如果我同时发送6个请求,前5个请求的响应时间为55s,第6个请求的响应时间为75s(=55+20)
我不明白为什么5个请求同时需要55秒。我预计响应时间为20秒,对于1个请求,我认为它将同时并行处理5个请求

55秒几乎是我个人处理时间20秒的3倍多

我对多线程知之甚少。有人能解释为什么并行任务的响应时间比单个处理时间长吗


谢谢

我之所以得到这些结果,是因为我的情况下5个工人太多了。 我选择5是因为gunicorn的推荐

通常,我们建议(2 x$num_核心)+1作为工人数量 首先。虽然不太科学,但这个公式是基于 假设对于给定的核心,一名工人将阅读或 在另一个工作进程处理数据时从套接字写入 请求

在我的例子中,我同时发送的所有请求都是流程参数。因此,我将工人人数改为2,现在我得到了对我有意义的结果

  • 1个请求的响应时间为20秒
  • 如果我同时发送两个请求,每个请求的响应时间为20秒
  • 如果我同时发送3个请求,则前2个请求的响应时间 是20秒,第三个请求的响应时间是40秒

我将如何重现您的结果?这取决于请求在做什么。这取决于它们如何同步以及它们争夺的共享资源。具体的细节很重要——事实上,它们起着至关重要的作用。