我目前正在评估各种并发解决方案来解决业务问题。该用例类似于“令人尴尬的并行”算法。
基本上对于单个用户请求,我们需要在计算响应之前从多个不同的数据源中检索数据。目前所有 3 个 DAO 调用都是串行进行的,但没有相互依赖关系,因此可以并行进行。
目前实施的解决方案:
- java.util.concurrent.ExecutorService 使用 Callables 和 Futures
- org.springframework.scheduling.annotation.Async 启用 spring 管理线程池,但仍然允许我进行异步调用
- Akka(被认为是矫枉过正)用于我们相对简单的用例
我想评估的最后一个框架是 Java ForkJoin 框架,我可以看到多个使用 RecursiveTasks 的示例,但我的用例本质上不是递归的,因此不适合模型:如果任务足够小,则拆分它并递归调用相同的方法(即分而治之)
我的用例是将任务拆分为 3 个任务。分叉所有 3 并再次加入。这甚至是 ForkJoin 实现的有效用例吗?或者我应该坚持使用通用的 ExecutorService 实现。