10得票1回答
使用自定义池的Java parallelStream()与调用者工作窃取?

通常使用Java 8的parallelStream()时,其结果是通过默认的公共Fork-Join池(即ForkJoinPool.commonPool())执行。 然而,如果任务不是CPU密集型,例如可能大部分时间都在等待IO,则这明显是不可取的。在这种情况下,需要使用一个不同的线程池,该线...

14得票2回答
Angular - RxJs ForkJoin如何在出现错误后继续进行多个请求

我正在查询一个 API 端点,但是使用不同的参数进行多次查询。由于某些原因,这些请求中的一些可能会失败并返回 500 错误。如果发生此情况,我仍希望其他请求继续执行,并返回所有成功请求的数据。let terms = []; terms.push(this.category.category);...

8得票2回答
在Java 7+的ForkJoinPool中,是否可以取消一个任务及其所有子任务?

我的程序通过分治法来搜索问题的解决方案(任何解决方案),使用递归和RecursiveTasks实现:我为第一个分支派生一个任务,然后递归到第二个分支:如果第二个分支找到了解决方案,则取消第一个分支,否则等待其结果。 这可能不是最优解。一种方法是,任何启动的任务都会在找到解决方案时抛出异常。但...

16得票2回答
ForkJoinTask与CompletableFuture的比较

在Java 8中,有两种启动异步计算的方式-CompletableFuture和ForkJoinTask。它们似乎很相似-甚至CompletableFuture的内部类也继承自ForkJoinTask。 是否有理由选择其中一种? 我能看到的一个关键区别是,CompletableFuture...

18得票3回答
使用ForkJoinPool的工作窃取行为可以避免线程饥饿死锁吗?

如果线程池中的所有线程都在等待同一池中排队的任务完成,那么正常的线程池将发生线程饥饿死锁。 ForkJoinPool 通过在join() 调用内部从其他线程窃取工作而避免了这个问题,而不是简单地等待。例如:private static class ForkableTask extends Re...

10得票1回答
scala.concurrent.forkjoin.ForkJoinPool与java.util.concurrent.ForkJoinPool的区别

为什么要为 Scala 分叉 ForkJoinPool? 哪种实现方式在哪种情况下更优?

7得票2回答
Fork-join中的内存可见性

Brian Goetz在http://www.ibm.com/developerworks/java/library/j-jtp03048.html上发表了一篇关于fork-join的好文章。在文章中,他使用fork-join机制列出了一个归并排序算法,其中他同时对数组的两侧进行排序,然后合并...

12得票1回答
何时应该停止 Spliterator 分割?

我知道设置并行Stream的开销很大,如果项目数量很少或每个项目的处理速度很快,则单线程处理速度会更快。 但是,trySplit()是否存在类似的阈值,即将问题分解为更小的块会适得其反?我想通过类比于归并排序在最小块上切换到插入排序来思考。 如果是这样,那么阈值是否取决于trySplit(...

14得票4回答
如何在ForkJoinPool中使用MDC?

在如何在线程池中使用MDC?的基础上,如何在ForkJoinPool中使用MDC?具体来说,如何包装ForkJoinTask以便在执行任务之前设置MDC值?

18得票3回答
Java Fork/Join 对堆栈使用的澄清

我阅读了Java 7中引入的Fork/Join框架的实现,我想确认我是否了解其中的原理。 据我所知,当一个线程分叉时,它在其队列中创建子任务(其他线程可能会偷取这些任务)。当线程尝试"join"时,它实际上是检查其队列中是否存在任务,然后递归执行它们,这意味着对于任何“join”操作-线程调...