gpt4 book ai didi

java - 在等待 api 调用完成时并行调用 N 阻塞 api 调用以充分利用 CPU 的最佳方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 20:08:07 26 4
gpt4 key购买 nike

我正在开发具有以下操作流程的微服务:

enter image description here

一个请求来执行一些任务。经过一些预处理后,我知道我需要执行一些任务,比如 10 个。现在任务彼此独立,因此可以并行执行。每个任务都有一些处理步骤和一些外部 API 调用。在所有任务完成后,需要返回组合结果。

这是一个请求,所以显然这个微服务也可以并行处理许多这样的请求。

这里的 API 调用是最耗时的操作,其他工作的执行时间相对较少。所以我想以一种可以并行执行尽可能多的任务的方式来设计它,因为对于 API 调用来说,大多数任务都会被阻止。

我看到的一个简单解决方案是使用一个使用 ExecutorService 的线程池,但这似乎不是一个理想的解决方案,因为假设我创建了一个包含 32 个线程的线程池,并且我得到了 60 个任务。因此,即使这 32 个任务因 api 调用而被阻止并且没有使用太多 CPU 时间,但一次只会执行 32 个任务。

这是否可以在不破坏单个单元任务的情况下实现?

最佳答案

最佳线程数取决于服务器拥有的核心数和 I/O 工作负载所花费的时间。参见 http://baddotrobot.com/blog/2013/06/01/optimum-number-of-threads/计算那个。

简而言之,它指出:threads = number of cores * (1 + wait time / service time)

时间必须来自您的观察和测量。对于其余部分,您可以使用 CompletableFuture如评论中所述,或者您可以使用 Executors类别:Executors.newFixedThreadPool(<num of threads>);

关于java - 在等待 api 调用完成时并行调用 N 阻塞 api 调用以充分利用 CPU 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56039251/

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