问题标签 [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.

0 投票
2 回答
2272 浏览

java - Java Fork Join Pool Eating All Thread Resources

I have a string parser (parsing large text blobs) that needs to be run in a java fork join pool. The pool is faster than other threading and has reduced my parsing time by over 30 minutes when using both regular expressions and xpath. However, the number of threads being created climbs dramatically and I need to be able to terminate them since the thread pool is called multiple times. How can I reduce the increase in threads without limiting the pool to just 1 core on a 4 core system?

My thread count is exceeding 40000 and I need it to be closer to 5000 since the program is running 10 times with a stone cold execution limit of 50000 threads for my user.

This issue is happening on both Windows and Linux.

I am:

  • setting the max processors to the number of available processors*configurable number which is currently 1
  • cancelling tasks after get() is called
  • desperately setting the forkjoin pool to null before reinstantiating because I am desperate

Any Help would be appreciated. Thanks.

Here is the code I am using to stop, get and restart the pool. I should probably also note that I am submitting each task with fjp.submit(TASK) and then invoking them all at shutdown.

while(pages.size()>0) { log.info("Currently Active Threads: "+Thread.activeCount()); log.info("Pages Found in the Iteration "+j+": "+pages.size());

0 投票
1 回答
141 浏览

java - 使用 ForkJoin 查找最大数

没有阻止if delay == 2它可以工作,但不能使用它。

这是 ForkJoin 的计算:

这是我的主要方法:

短错误:

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常

在 com.bg.fork_join.MainFJ.main(MainFJ.java:24) 引起:java.lang.ArrayIndexOutOfBoundsException ... 15 更多

引起:java.lang.ArrayIndexOutOfBoundsException: 10000 at com.bg.fork_join.MyForkJoinTask.compute(MyForkJoinTask.java:31)

你能告诉我问题出在哪里吗?

0 投票
1 回答
76 浏览

java - 线程内的线程安全?

我正在用 Java 编写一个程序来模拟分子算法。由于分子算法固有地使用并发性(您可以根据需要进行尽可能多的化学反应,只要您有化学物质和浓度来提供它们),它需要我使用并发性。

但是,我最近发现我用于图形结构的包不是线程安全的。我为每个线程设置了一个 ArrayList 图表。在计算过程中,一个线程修改了它自己的 ArrayList 和其中的一些图,但我没有代码允许一个线程修改 ArrayList 或任何其他线程的图,直到它从其子线程接收到两个 ArrayList。

为了做到这一点,我正在使用 ForkJoinPool (我对此的理解是,如果我错了,请纠正我,是将任务划分为两个线程,将任务划分为两个线程......当计算在叶子线程中完成,它们返回到它们的父线程,依此类推,直到根子线程返回到它,并且根,如果 ForkJoinTask,则返回结果)。

不用说,我想要发生的一个明显的例外是工作钢化。因此,我的问题是,除了worksteel 和返回父线程的子线程之外,如果没有线程与任何其他线程交互,是否可以在并发应用程序中使用非线程安全对象?

0 投票
1 回答
6670 浏览

java - 如何配置和调整 Akka Dispatchers

我在这里查看文档: //doc.akka.io/docs/akka/2.3.3/java/dispatchers.html

我们以这样一种方式使用 Akka,我们有两个独立的调度程序(默认的 fork-join 执行程序)用于不同的参与者。我们现在遇到了一些性能问题,我们正在研究如何调整调度程序配置参数,看看它们如何影响应用程序的性能。

我查看了文档,但并不真正了解配置参数。例如,仅对于简单的默认值,fork-join-executor 调度程序:

这些是什么以及我们应该如何配置它们以查看它们如何影响应用程序性能?

谢谢!

0 投票
3 回答
6835 浏览

java - 官方文档哪里说Java的并行流操作使用fork/join?

以下是我对Java 8的Stream 框架的理解:

  1. 某些东西创建了源流
  2. 该实现负责提供一个BaseStream#parallel()方法,该方法又返回一个可以并行运行其操作的 Stream。

虽然有人已经找到了一种将自定义线程池与 Stream 框架的并行执行一起使用的方法,但我终生无法在 Java 8 API 中找到任何提及默认 Java 8 并行 Stream 实现将使用ForkJoinPool#commonPool()的内容。(Collection#parallelStream()StreamSupport类中的方法,以及我不知道的 API 中其他可能的并行启用流来源)。

我可以从搜索结果中看到的只有这些花絮:


所以我的问题是:

哪里说ForkJoinPool#commonPool()用于对从 Java 8 API 获得的流进行并行操作?

0 投票
1 回答
210 浏览

java - RecursiveAction 线程池大小

我刚刚看到了 Java 7 RecursiveAction.invokeAll() 的用法,我想知道:

任务线程池的大小是多少?(或确定它的算法..)

如果我有很多任务(比如 100 个任务),我应该使用它吗?

0 投票
2 回答
1377 浏览

java - 限制 Java 1.7 ForkJoinPool 的 Q 大小

我们正在做一些需要外部 I/O 并且是递归的任务。为了实现这一点,我们正在对从旧的 ExecutorService 切换到 ForkJoinPool 进行原型设计。我们的并行度显然会高于我们的内核数量,因为我们将把线程的大部分时间花在 I/O 等待上。我们只有同步网络 API,所以这里没有任何其他选项。

在旧的 ExecutorService 中,您可以通过设置队列大小来拒绝任务,以免它们堆积。在 ForkJoinPool 中,这似乎是不可能的,而且它似乎在 Oracle 1.7 实现中扩展到了这个值。

这是我们想要的更大的队列。是否有具有以下功能的 fork/join 池实现?

1) 提供一种在创建线程时命名线程的工具的能力?我们有几个 I/O 工作池,它有助于调试查看哪个池创建并拥有线程。

2) 提供设置最大队列大小的能力。在调度父任务时,我们实际上希望它为 0。如果调度器中没有容量并且父任务已启动,我们希望它在调用提交并尝试调度的线程中运行。这将通过减慢调用者的速度为我们提供自动节流机制。

谢谢,托德

0 投票
3 回答
334 浏览

java - 问题多线程加载数千张图像导致 IOException

我在通过 ForkJoinPool 加载大量图像时遇到问题,我正在使用超线程的 4 核 Intel 进行测试,因此有 8 个逻辑线程。但是,我将池限制为只有 4 个线程。我收到来自 ImageIO 的错误,无法找到图像。

任何关于我做错了什么的见解都会很棒,我注意到它真的只有在我有超过 1700 张图像并且所有图像都超过 5MB 时才会中断。

这是我从 Java 收到的错误:

当我知道文件在那里时。我将此代码用作指南: https ://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html

0 投票
1 回答
780 浏览

java - Fork/Join 结合 FileChannel 复制文件

最近我正在使用 Java 7 FORK/JOIN 框架和 FileChannel 来复制文件。这是我的代码(Test.java):

我运行我的代码,如果线程数为 1,则文件被精确复制,但当线程数为 2 时,文件“C:\abc.cdm”为 77KB(78335),但复制后,文件“C:\ temp\abc.cdm" 只是 (39KB)。

我哪里错了,请告诉我??

更新:我的问题已经解决 问题出在 isDone 方法中,一定是:

还要编辑以下代码行:

这只是 FORK/JOIN 用法的练习!

0 投票
1 回答
241 浏览

java - 继承自 RecursiveTask 的抽象类

我在解决问题时遇到问题。首先我有一个继承自 RecursiveTask 的抽象类:

一个子类

我正在调用这样的任务:

当我运行它时,我得到了异常:

任何人都可以提示我做错了什么吗?