gpt4 book ai didi

java - 创建自定义 java.util.concurrent.ForkJoinTask

转载 作者:行者123 更新时间:2023-12-02 05:19:06 25 4
gpt4 key购买 nike

我目前正在评估各种并发解决方案来解决业务问题。该用例类似于“尴尬并行”算法。

基本上,对于单个用户请求,我们需要在计算响应之前从多个不同的数据源检索数据。目前,所有 3 个 DAO 调用都是串行进行的,但没有相互依赖关系,因此可以并行进行。

迄今为止实现的解决方案:

  • 使用 Callables 和 Future 的 java.util.concurrent.ExecutorService
  • org.springframework.scheduling.annotation.Async 使 spring 能够管理线程池,但仍允许我进行异步调用
  • 对于我们相对简单的用例来说,Akka(被认为是大材小用)

我想评估的最后一个框架是 Java ForkJoin 框架,我可以看到多个使用 RecursiveTasks 的示例,但我的用例本质上不是递归的,因此不适合该模型:如果任务足够小 做吧别的 拆分它并递归调用相同的方法(即分而治之)

我的用例是将任务拆分为 3 个任务。 fork 所有 3 个并再次加入。这是否是 ForkJoin 实现的有效用例?或者我应该坚持使用通用的 ExecutorService 实现。

最佳答案

ExecutorService 的优点是它可以保留线程池。因此,在您的情况下,对于多个连续调用,线程将被重用,这为操作系统节省了一些周期来停止和创建新线程。

ForkJoinPool 的进一步优点是它可以“窃取”工作。 AFAIK,这意味着它允许一个已完成任务的线程立即执行另一个任务,其开销比 ExecutorService 少得多。

就您而言,ForkJoinPool 的优势似乎微乎其微。

关于java - 创建自定义 java.util.concurrent.ForkJoinTask<V>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11326444/

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