分治法基本情况下的迭代分叉连接



我有一个递归的分治算法,在开始除法之前需要两个计算密集型的基本情况任务。初始基本情况是独立的任务,所以我想并行处理它们。在基本情况之后,除法在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帖子,所以请原谅任何格式或协议错误。谢谢你的帮助。

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

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

相关内容

  • 没有找到相关文章

最新更新