gpt4 book ai didi

java - 分而治之的基本情况下的迭代 Fork-Join

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:36 26 4
gpt4 key购买 nike

我有一个递归分而治之算法,它在开始划分之前需要两个计算密集型基本案例任务。最初的基本案例是独立的任务,所以我想并行执行它们。在基本情况之后,划分运行具有 0 和 1 之间不同输入的相同任务,并根据输出决定是否再次划分。我通过创建一个伪造递归的任务包装器对象来使基本情况起作用,但这感觉像是一个杂乱无章的问题,如下所示:

public static void doSomething () {
ForkJoinPool pool = new ForkJoinPool();
private ArrayList<Object> al = new ArrayList<Object>();
TaskWrapper tw = new TaskWrapper(true,-1);

al.addAll(pool.invoke(tw));
}

@SuppressWarnings("serial")
public static class TaskWrapper extends RecursiveTask<ArrayList<Object>> {
private ArrayList<Object> al = new ArrayList<Object>();
private boolean arg;
private double input;
private Object out;

TaskWrapper(boolean ar, double in){
arg = ar;
input = in;
}

@Override
public ArrayList<Object> compute() {
if (arg == false) {
out = new Object(runIntensiveTask(input));
al.add(out);
}
else {
// Right Base Case
TaskWrapper right = new TaskWrapper(false, 1);
right.fork();

// Left Base Case
TaskWrapper left = new TaskWrapper(false, 0);
al.addAll(left.compute());

// Join with Right result
al.addAll(right.join());
}
return al;
}
}

有没有更简单的方法来完成同样的事情?

这是我的第一篇 StackOverflow 帖子,所以请原谅任何格式或协议(protocol)错误。感谢您的帮助。

最佳答案

人们使用这个框架的方式从来没有让我感到惊讶。简而言之:该框架旨在处理平衡树结构 (D.A.G) 当您将它用于其他用途时,就会出现问题。您不是在处理平衡树。

Java需要的是一个通用的并行引擎,但它拥有的是这个框架。所以,你正在尽力而为。如果有效,那很好。我在 Java7 中看不到任何替代方案,但我会更深入地研究。我想知道它在分析器(比如 visualVM)下的表现如何。因为我没有 intensiveTask 类,所以我无法继续. Java7 中的 join() 会创建“持续线程”,这会对应用程序产生真正的影响。让我们知道探查器说了什么。

关于java - 分而治之的基本情况下的迭代 Fork-Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22551691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com