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

标签 java multithreading performance parallel-processing fork-join

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

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

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

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

最佳答案

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

特别是,“工作窃取”在多个处理器周围分散工作时会引起激烈争用并且效率低下。递归分解也不是特别有效。

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

参见:

关于java - 使用 jdk 7 新的 fork join 框架的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11809652/

相关文章:

java - 为什么 preparedStmt.setString(1 ,"text' xx"); 不起作用,因为它可能会搞乱查询(Java)?

c - 我想知道是否有办法将 OpenMP 中的特定线程分配给特定的 CPU 核心?

java - 如何在 Java 中重新分区文件中的每一行

javascript - 我应该如何处理多个依赖于订单的条件?

database - 带有 n :n helper table - read twice or duplicate rows? 的数据库表

java - openjdk 中的 networkaddress.cache.ttl null

java - 使用 OkHttp 获取 Http 状态码

java - 我无法将 "-fx-text-fill: white"设置为外部 css,以设置嵌套在 JavaFX 中的 Accordion 中嵌套的 GridPane 中的文本样式

multithreading - Tensorflow 中的 A3C - 我应该使用线程还是分布式 Tensorflow API

java - 通过 Java 中的包含检查爬虫 IP 列表的最快方法