问题标签 [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.
java - 什么是 ForkJoinPool 异步模式
ForkJoinPool 的异步模式是什么意思?Javadoc 提到它使队列(它是每线程队列吗?)FIFO 而不是 LIFO。在实践中意味着什么?
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 中工作。
谢谢你,亚历克斯
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 用于少数、独立、外部生成、长、有时阻塞的任务
这种区别完全正确吗?我们能说得更具体一点吗?
scalability - Akka - 在负载测试期间,forkjoinpool.scan 占 CPU 时间的 20%
我们在负载测试和扩展 akka 应用程序方面取得了一些不错的进展,但我们看到 scala.concurrent.forkjoin.ForkJoinPool.scan() 在 visualvm 中大约 20% 的自身时间成为第二高的热点。自用时间 (CPU) 列仅表示其中的一小部分(小于自用时间列值的 1%)。
我怀疑这意味着阻塞或上下文切换可能存在问题,但我不太确定 - 任何人都可以提供见解吗?如果是上下文切换,我猜将调度程序的吞吐量调整到更高的数字可能会给我们带来收益,否则如果它是由阻塞引起的,我们将需要更多地阅读代码。
任何见解都非常感谢。
java - ForkJoinPool 重置线程中断状态
在取消ForkJoinPool返回的 Future 时,我刚刚注意到以下现象。给定以下示例代码:
该程序从不打印interrupted
. ForkJoinTask#cancel(boolean)的文档说:
mayInterruptIfRunning - 这个值在默认实现中没有影响,因为中断不用于控制取消。
如果 ForkJoinTasks 忽略中断,您还应该如何检查提交给 ForkJoinPool 的 Callables 中的取消?
java - 为什么这个简单的 java fork join pool 不起作用?
我即将测试这个 forkjoin 池,但它不能正常工作。我想知道为什么?
这是我用来获取数组并将 3 添加到其元素的类:
这是主要课程:
java - 用于分治基本情况的迭代 Fork-Join
我有一个递归分治算法,在开始划分之前需要两个计算密集型的基本案例任务。最初的基本案例是独立的任务,所以我想并行执行它们。在基本情况之后,分割运行相同的任务,不同的输入在 0 和 1 之间,并根据输出决定是否再次分割。我通过创建一个伪造递归的任务包装对象来使基本案例工作,但这感觉就像一个杂物,如下所示:
有没有更简单的方法来完成同样的事情?
这是我的第一篇 StackOverflow 帖子,所以请原谅任何格式或协议错误。感谢您的帮助。
java - Scala 异步与 Java ForkJoinTask
前段时间我发现了Scala Async Project。问题是:这个async
块中有什么神奇的东西不能通过普通函数(没有宏扩展)来实现?
让我们看一下介绍中的第一个例子:
在上面的示例中,我没有看到任何不能用纯 Java 编写的内容。这段代码做同样的事情:
Scalaasync
能做什么而 Java 不能?也许在一些更复杂的情况下?我想念什么?
java - 关闭 ForkJoinPool 会导致程序打印异常并无限期挂起
我正在ExecutionContext
为我的基于期货的代码使用自定义,这样每当用户决定中断程序时,无论正在发生的任何并发活动都会在他们第一次尝试安排另一个Future
要处理的活动时被中断,并且程序可以退出,而不是等待任何长时间运行的任务完成。
但是,Executor.shutdownNow
调用会导致 ajava.lang.InterruptedException
来自 first sleep(500)
,但它永远不会到达 the Await.result
and 因此也不会到达catch
orfinally
块;此外,该程序只是无限期挂起。
runMain test
运行时(如果重要,使用 SBT ),这是输出:
为什么会这样?