问题标签 [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 - 如何为现在在 for 循环中完成的一系列操作实现 forkjoin
我有一个发件人列表,我必须单独并行发送邮件。目前我正在迭代列表构造正文(因为它对不同的人不同),然后发送它们。我如何使用 forkjoin 来实现这一点。我尝试使用 recusiveAction 但我猜它仅用于递归任务。
互联网上所有可用的示例都是使用 RecursiveAction 实现的。是否有任何其他类可以实现这一点。
java - fork/join 框架比线程池好多少?
使用新的fork/join 框架比在开始时简单地将大任务分成 N 个子任务,将它们发送到缓存线程池(来自Executors)并等待每个任务完成有什么好处?我看不到使用 fork/join 抽象如何简化问题或使解决方案比我们多年来所拥有的更有效。
例如,教程示例中的并行化模糊算法可以这样实现:
在开始时拆分并将任务发送到线程池:
这些任务进入线程池的队列,当工作线程可用时,它们会从队列中执行。只要拆分足够细化(以避免必须特别等待最后一个任务)并且线程池有足够的(至少 N 个处理器)线程,所有处理器都在全速工作,直到整个计算完成。
我错过了什么吗?使用 fork/join 框架的附加价值是什么?
java - 在 JDK6 中使用 fork-and-join
据我了解jdk7支持fork-and-join,我可以在JDK6中使用fork-and-join而不升级到JDK7.0吗?
java - Java 的 fork-and-join 线程池是否适合执行 IO 绑定任务?
在我的应用程序中,我必须通过执行许多网络 io 绑定任务和有时一个 io 绑定任务来解决问题,并将其划分为较小的 io 绑定任务。这些任务目前正在使用 Java 的标准线程池机制执行。我想知道我是否可以转向 fork-and-join 框架?但问题是,forkandjoin 框架通常用于解决 io 绑定操作还是 CPU 绑定?我认为它们主要用于 CPU 绑定操作,因为 fork-and-join 框架利用工作窃取技术来利用多核处理器,但是如果我将它用于 IO 绑定任务,会不会有任何不利影响?
c# - Fork/Join 并行模式
在线程方面总是有点弱,只是通过Steven Toub 的并行计算书。
在第 39 页有以下 Fork/Join 模式的示例
例如,对于上面的方法 3,只是为了澄清结果是否都正式具有值,当你这样做时
“返回结果”?
还是只有其中一些具有取决于线程是否已完成的值?
当您调用时,方法 4 也是如此ToArray()
java - 如何在 Javaello 的 ForkJoin 框架中使用多个计算方法
我需要一个更简单的问题来解决。我需要解决 1000 个随机 X 值和 1000 个随机 Y 值的并行求和。我正在使用java的Parallel ForkJoin框架。使用单一计算方法,不可能计算完全不同路径中 X 值和 Y 值的总和。
此外,我需要计算 X * Y 的总和。即单个线程遍历的 Σxiyi BUT X 值分配一个单独的任务,并且 Y 作为单独的任务插入到线程池中。那么如何同时乘以 X 和 Y 值,即 X * Y ==> (X = 100, Y = 150)?第一个线程在 X 上运行,第二个在 Y 上运行。
代码:
公共类 RegressionLineForkJoin {
}
java - Java 7 ForkJoinTask 和 Akka 2.0
是否有计划利用 java 7 util.concurrent 的 ForkJoin API,或者在 Akka 中公开类似的 API?
java - 在 ForkJoinPool 任务/操作中处理未捕获异常的更好方法
ForkJoinPool
使用提交任务(RecursiveAction
或)时处理异常(未捕获)的更好方法是什么RecursiveTask
?
ForkJoinPoolThread.UncaughtExceptionHandler
在 WorkerThread 突然终止时接受 a 来处理异常(这无论如何都不受我们的控制),但是在ForkJoinTask
抛出异常时不使用此处理程序。我在我的实现中使用标准submit
/invokeAll
方式。
这是我的场景:
我有一个线程在无限循环中运行,从第 3 方系统读取数据。在此线程中,我将任务提交给ForkJoinPool
我正在使用 RecursiveAction,在少数情况下使用 RecursiveTask。这些任务使用submit()
方法提交给 FJPool。我想要一个通用的异常处理程序,类似于UncaughtExceptionHandler
如果任务抛出未经检查/未捕获的异常,我可以处理异常并在需要时重新提交任务。处理异常还可以确保如果一个/一些任务抛出异常,排队的任务不会被取消。
invokeAll()
方法返回一组 ForkJoinTasks 但这些任务在递归块中(每个任务调用该compute()
方法并且可以进一步拆分 [假设场景])
我注意到当 3-4 个任务失败时,整个队列提交单元被丢弃。目前我已经放了一个try/catch
我个人不喜欢的围绕 processTask 。我正在寻找更通用的。
- 我还想知道所有失败的任务列表,以便我可以重新提交它们
- 当任务抛出异常时,线程是否会从池中被逐出(尽管我的分析发现它们没有 [但不确定])?
- 在 FutureTask 上调用
get()
方法更有可能让我的流程按顺序等待,直到任务完成。 - 我只想知道任务失败的状态。我不在乎它什么时候完成(显然不想等一个小时后)
任何想法如何处理上述场景中的异常?
java - 通过 DnC 计算阶乘
我正在尝试通过分而治之的策略来实现阶乘函数。我使用 ForkJoin 框架来分叉每个递归任务以加快计算速度。但我发现它并没有像我预期的那样加速。不使用 ForkJoin 需要 28 秒计算 50000 的阶乘,而使用 ForkJoin 需要 25 秒。这是没有forkjoin的代码:
这是使用 forkJoin 的代码:
我哪里错了?我认为这不会是 Fork/Join 的结果。请帮忙!
java - 内联分配作为确保读取顺序的一种方式
在 Java7 的ForkJoinPool
类中,有一条关于实现的注释,其中指出:
方法 signalWork() 和 scan() 是主要的瓶颈,因此特别是微优化/损坏。有很多内联赋值(形式为“while ((local = field) != 0)”),这通常是确保所需读取顺序(有时很关键)的最简单方法
我的问题是:内联赋值如何帮助读取顺序(我熟悉 Java 内存模型,但我看不到内联赋值在这里有什么帮助)?