作为fork();
中的compute()
方法,每次方法compute()
出现时,怎么会被称为另一种并行度?是否有布尔标志?
修改
重写类RecursiveTask的方法compute()
:
(伪代码)
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已被激活?
提前致谢。
答案 0 :(得分:2)
查看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
线程执行较低级别的任务(在二叉树上较低),为您提供所需的并行性