繁体   English   中英

关于fork-join框架

[英]About fork-join framework

作为方法fork(); compute() ,每当方法compute()发生时,怎么会被称为另一个并行度? 是否有布尔标志? 编辑:

重写类的方法compute() RecursiveTask :(伪代码)

if {array.length<100)
do it
else
divide array by 2;
fork();
int righta = rightArray.compute();
int lefta =(Integer)leftArray.join();
return righta +lefta;

所以基本上这是递归调用的compute()方法,当fork()发生时,它可以使用并行性并将该任务与另一个核心一起处理。 但是,在递归调用方法时,应始终调用递归的fork() 所以在现实中它不会发生(没有任何意义)。 是否由于布尔标志表示fork已被激活?

提前致谢。

看看API

 class Fibonacci extends RecursiveTask<Integer> {
   final int n;
   Fibonacci(int n) { this.n = n; }
   Integer compute() {
     if (n <= 1)
        return n;
     Fibonacci f1 = new Fibonacci(n - 1);
     f1.fork();
     Fibonacci f2 = new Fibonacci(n - 2);
     return f2.compute() + f1.join();
   }
 }

每次调用compute() ,它都会通过fork在另一个线程(或队列)上放置另一个计算。 连续计算,直到没有更多的n可供处理。 此时,计算将等到“右”侧完成,而f1.join()等待“左”侧完成。

每当调用join ,它实际上会使joining线程执行较低级别的任务(在二叉树上较低),为您提供所需的并行性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM