问题标签 [forkjoinpool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6554 浏览

java - 什么是 ForkJoinPool 异步模式

ForkJoinPool 的异步模式是什么意思?Javadoc 提到它使队列(它是每线程队列吗?)FIFO 而不是 LIFO。在实践中意味着什么?

0 投票
3 回答
839 浏览

java - Java ExecutorService - 缩放

我正在尝试使用 JavaExecutorService及其功能编写一个程序invokeAll。我的问题是:该invokeAll功能是否同时解决了任务?我的意思是,如果我有两个处理器,会同时有两个工人吗?因为我无法使其正确缩放。如果我给newFixedThreadPool(2)或 1,完成问题需要相同的时间。

Map是一个实现Callable并且wp是部分解决方案的向量的类,该类在不同时间保存一些信息。

为什么不能缩放?可能是什么问题呢?

这是 PartialSolution 的代码:

这是地图的代码:

所以在地图中,我从片段中取出每一行并搜索每个表达式的出现次数,我还保存了行数。在处理完所有片段后,在同一个 PartialSolution 中,我将信息保存在哈希图中并返回新的 PartialSolution。在下一步中,我将 PartialSolutions 与相同的文件名结合起来,并将它们引入一个 Callable 类 Reduce,它与 map 相同,不同之处在于它进行其他操作,但也返回一个 PartialSolution。

这是运行地图任务的代码:

在任务中,我创建 Map 类型的任务,并在列表中获取它们。我不知道如何阅读 JVM 线程转储。我希望我给你的信息足够好。如果有帮助,我在 NetBeans 7.0.1 中工作。

谢谢你,亚历克斯

0 投票
4 回答
7031 浏览

java - Java-5 ThreadPoolExecutor 与 Java-7 ForkJoinPool 相比有什么优势?

Java 5 以 Executor 框架的形式引入了对线程池异步任务执行的支持,其核心是 java.util.concurrent.ThreadPoolExecutor 实现的线程池。Java 7 以 java.util.concurrent.ForkJoinPool 的形式添加了一个替代线程池。

查看它们各自的 API,ForkJoinPool 在标准场景中提供了 ThreadPoolExecutor 功能的超集(尽管严格来说 ThreadPoolExecutor 提供了比 ForkJoinPool 更多的调优机会)。除此之外,观察到 fork/join 任务似乎更快(可能是由于工作窃取调度程序),需要的线程肯定更少(由于非阻塞连接操作),人们可能会觉得 ThreadPoolExecutor 已被取代ForkJoinPool。

但这真的正确吗?我读过的所有材料似乎都总结了两种线程池之间相当模糊的区别:

  • ForkJoinPool 用于许多相关的、任务生成的、短的、几乎不会阻塞(即计算密集型)任务
  • ThreadPoolExecutor 用于少数、独立、外部生成、长、有时阻塞的任务

这种区别完全正确吗?我们能说得更具体一点吗?

0 投票
1 回答
667 浏览

java - ForkJoinPool 类的 Execute() 方法

以下是API所说的:

线程,由 Executor 实现决定。

ForkJoinPool 已经是 ExecutorService 的实现了?他们在说什么?我怎么知道这种方法的行为?

0 投票
1 回答
3484 浏览

scalability - Akka - 在负载测试期间,forkjoinpool.scan 占 CPU 时间的 20%

我们在负载测试和扩展 akka 应用程序方面取得了一些不错的进展,但我们看到 scala.concurrent.forkjoin.ForkJoinPool.scan() 在 vi​​sualvm 中大约 20% 的自身时间成为第二高的热点。自用时间 (CPU) 列仅表示其中的一小部分(小于自用时间列值的 1%)。

我怀疑这意味着阻塞或上下文切换可能存在问题,但我不太确定 - 任何人都可以提供见解吗?如果是上下文切换,我猜将调度程序的吞吐量调整到更高的数字可能会给我们带来收益,否则如果它是由阻塞引起的,我们将需要更多地阅读代码。

任何见解都非常感谢。

0 投票
2 回答
1605 浏览

java - ForkJoinPool 重置线程中断状态

在取消ForkJoinPool返回的 Future 时,我刚刚注意到以下现象。给定以下示例代码:

该程序从不打印interrupted. ForkJoinTask#cancel(boolean)的文档说:

mayInterruptIfRunning - 这个值在默认实现中没有影响,因为中断不用于控制取消。

如果 ForkJoinTasks 忽略中断,您还应该如何检查提交给 ForkJoinPool 的 Callables 中的取消?

0 投票
1 回答
1993 浏览

java - 为什么这个简单的 java fork join pool 不起作用?

我即将测试这个 forkjoin 池,但它不能正常工作。我想知道为什么?

这是我用来获取数组并将 3 添加到其元素的类:

这是主要课程:

0 投票
1 回答
463 浏览

java - 用于分治基本情况的迭代 Fork-Join

我有一个递归分治算法,在开始划分之前需要两个计算密集型的基本案例任务。最初的基本案例是独立的任务,所以我想并行执行它们。在基本情况之后,分割运行相同的任务,不同的输入在 0 和 1 之间,并根据输出决定是否再次分割。我通过创建一个伪造递归的任务包装对象来使基本案例工作,但这感觉就像一个杂物,如下所示:

有没有更简单的方法来完成同样的事情?

这是我的第一篇 StackOverflow 帖子,所以请原谅任何格式或协议错误。感谢您的帮助。

0 投票
1 回答
1010 浏览

java - Scala 异步与 Java ForkJoinTask

前段时间我发现了Scala Async Project。问题是:这个async块中有什么神奇的东西不能通过普通函数(没有宏扩展)来实现?

让我们看一下介绍中的第一个例子:

在上面的示例中,我没有看到任何不能用纯 Java 编写的内容。这段代码做同样的事情:

Scalaasync能做什么而 Java 不能?也许在一些更复杂的情况下?我想念什么?

0 投票
0 回答
586 浏览

java - 关闭 ForkJoinPool 会导致程序打印异常并无限期挂起

我正在ExecutionContext为我的基于期货的代码使用自定义,这样每当用户决定中断程序时,无论正在发生的任何并发活动都会在他们第一次尝试安排另一个Future要处理的活动时被中断,并且程序可以退出,而不是等待任何长时间运行的任务完成。

但是,Executor.shutdownNow调用会导致 ajava.lang.InterruptedException来自 first sleep(500),但它永远不会到达 the Await.resultand 因此也不会到达catchorfinally块;此外,该程序只是无限期挂起。

runMain test运行时(如果重要,使用 SBT ),这是输出:

为什么会这样?