【问题标题】:Why is multithreading time not equal to individual processing time with gunicorn?为什么多线程时间不等于 gunicorn 的单个处理时间?
【发布时间】:2020-12-22 11:27:09
【问题描述】:

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

  • 1 个请求的响应时间为 20 秒。
  • 如果我同时发送5个请求,每个请求的响应时间是55s。
  • 如果我同时发送6个请求,前5个请求的响应时间为55s,第6个请求的响应时间为75s(= 55 + 20)

我不明白为什么同时 5 个请求需要 55 秒。我预计 1 个请求的响应时间为 20 秒,认为它会同时并行处理 5 个请求。

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

我对多线程了解不多。有人能解释一下为什么并行任务的响应时间比单个处理时间长吗?

谢谢

【问题讨论】:

  • 我将如何重现您的结果?这取决于请求在做什么。这取决于它们如何同步以及它们争夺哪些共享资源。具体细节很重要——事实上,它们决定了一切。

标签: multithreading performance time gunicorn


【解决方案1】:

我得到这些结果的原因是因为 5 个工人对我来说太多了。 因为gunicorn推荐我选择了5here

通常我们建议 (2 x $num_cores) + 1 作为工人数量 开始。虽然不是太科学,但公式是基于 假设对于给定的核心,一名工作人员将阅读或 当其他工作人员正在处理一个 请求。

就我而言,我同时发送的请求都是为了处理参数。因此,我将工人编号更改为 2,现在我得到了对我有意义的结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2019-06-14
    相关资源
    最近更新 更多