问题标签 [fork-join]
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 - Fork-Join 相关:join() vs get() vs invoke()
是否有必要使用join()
withfork()
或者我也可以使用join()
, get()
, invoke()
. 我检查了API,除此之外, get()
我InterruptedException
没有ExecutionException
看到差异……而且invoke()
看起来完全一样。
但是我总是看到与其他两种方法相关fork()
而join()
不是其他两种方法……它们不提供并行性吗?invoke()
拥有和join()
完全一样的目的是什么?我可以通过实现future来理解get(),但是invoke()和join()呢?提前致谢。
编辑:我在引用的 API 中的错误实际上说明了一些关于它的内容,正如已经收到的答案所指出的那样。但是它们是什么意思:
方法invoke()在语义上等价于fork();join() 但总是尝试在当前线程中开始执行
提前致谢。
java - ForkJoinPool 中 Execute 、 Submit 和 Invoke() 之间的区别
我有以下运行和编译的类(你可以试试看)。唯一让我有点困惑的是,最后它与 fj.invoke(task) 一起工作得很好,但它不适用于 fj.execute(task) 和 fj.submit(task)。后者我没有得到任何输出。从 API 来看,它们也应该与其他方法一起执行任务。即使它们返回或不返回值,它们仍然应该执行任务。我在这里想念什么?
您可以简单地通过复制和粘贴代码来尝试它,通过替换
fj.invoke(new RecursiveTaskActionThing(500));
和
fj.execute(new RecursiveTaskActionThing(500));
或与
fj.submit(new RecursiveTaskActionThing(500));
它不会吐出任何输出......我想知道为什么。
提前致谢。
java - 分叉/连接示例
我正在尝试使用Fork/Join Mechanism ( List>> forks ) 机制来搜索磁盘“D:/”上的所有文件。
这是代码。我从 JLS 那里得到了这种机制的实现。
控制台说:
有什么问题 ???我该如何解决?
java - ForkJoinTask 完成处理程序
我有一个长期运行的计算,我已经与Java 的ForkJoinTask
.
JavaFutureTask
提供了一个模板方法done()
。覆盖此方法允许“注册完成处理程序”。
是否可以为 a 注册完成处理程序ForkJoinTask
?
我问是因为我不想在我的应用程序中有阻塞线程 - 但是一旦我通过调用result = ForkJoinPool.invoke(myForkJoinTask)
or检索计算结果,我的应用程序就会有一个阻塞线程result = ForkJoinPool.submit(myForkJoinTask).get()
。
node.js - 使用 Fork 从子级向父级发送错误
我有以下代码
如何处理从 pChild.js 抛出的父级错误并终止进程?
java - 在 compute() 中调用超过 2 个 RecursiveActionTasks
在以下代码中调用许多 RecursiveAction 会有什么缺点?
类 RecursiveActionThing 扩展 RecursiveAction {
}
到目前为止,我只看到调用 2 个任务,因此执行上述调用可能会在创建所有这些任务时产生巨大的开销,但是为什么通过将 varargs 作为参数来允许呢?在某些情况下可能有用吗?哪个?提前致谢。
java - ForkJoinPool 创建数以千计的线程
一个演示问题的简单测试:
在这个示例中,我创建了 RecursiveTask,它简单地计算数字以在 CPU 上创建一些负载。它递归地将传入范围划分为 10 个部分,当部分的大小小于 1000 或递归“深度”超过 10 时,它开始计算数字。
在 compute() 方法中注释了 3 个案例。区别仅在于分叉子任务的顺序。根据我分叉子任务的顺序,最终的线程数是不同的。在我的系统上,它为第一种情况创建了 3000 多个线程,为第二种和第三种情况创建了 4 个线程。
问题是:有什么区别?我真的需要知道这个框架的内部结构才能成功使用它吗?
scalability - Akka - 在负载测试期间,forkjoinpool.scan 占 CPU 时间的 20%
我们在负载测试和扩展 akka 应用程序方面取得了一些不错的进展,但我们看到 scala.concurrent.forkjoin.ForkJoinPool.scan() 在 visualvm 中大约 20% 的自身时间成为第二高的热点。自用时间 (CPU) 列仅表示其中的一小部分(小于自用时间列值的 1%)。
我怀疑这意味着阻塞或上下文切换可能存在问题,但我不太确定 - 任何人都可以提供见解吗?如果是上下文切换,我猜将调度程序的吞吐量调整到更高的数字可能会给我们带来收益,否则如果它是由阻塞引起的,我们将需要更多地阅读代码。
任何见解都非常感谢。
java - 在单处理器上使用 Java fork join 框架
我已经开始使用 fj JAVA 框架了。
据我了解,它只是将算法计算等大任务划分为小线程。
问题是是否值得在单处理器机器上使用这个框架。
谢谢