使用jdk 7的新fork join框架的性能问题

时间:2012-08-04 15:11:59

标签: java multithreading performance parallel-processing fork-join

我正在使用jdk 7的新forkjoin框架。 我有一个任务,必须使用不同的参数多次执行。

此任务扩展RecursiveTask。要执行的任务超过100个,可以同时执行。任务是独立的,因此不需要任何同步。 因此,我首先创建了所需的任务并将它们传递给forkjoin线程池。 但是应用程序变得比没有任何并行性的运行速度慢。

我的第一个想法是,我创建了很多线程。这就是为什么我试图回收线程以减少对象创建开销,但这对性能没有影响。使用reinitialize()方法回收im。此外,通过回收,性能比没有任何并行性的运行速度慢。

在任务中执行的操作并不简单,运行线程的持续时间为5到150毫秒。该应用程序在双核机器上运行,即时使用ubuntu和oracle jdk 7。

1 个答案:

答案 0 :(得分:0)

CoopSoft的Edward Harned发现了用Java实现的Fork / Join设计的许多问题。

特别是"偷工作"遭受高度争用在围绕多个处理器传播工作方面效率很低。递归分解也不是特别有效。

如果您的任务递归 - 您说有100个,并且它们可以同时执行 - 那么使用ThreadPoolExecutor的更简单的方法可能会更有效。

请参阅: