如何解决为什么带有Join / Fork框架的Java代码计算斐波那契数如此慢?
此代码有什么问题? 我正在使用Fork / Join Framework来使用并行线程。 但是计算斐波那契所需的时间比仅使用1个线程的普通计算要长得多。
public class FibonacciRecursiveTask extends RecursiveTask<Integer> {
public static final int THRESHOLD = 1;
int n ;
public FibonacciRecursiveTask(int n)
{
this.n = n;
}
@Override
protected Integer compute() {
if(n<= THRESHOLD)
{
//System.out.println(n);
return n;
}
FibonacciRecursiveTask left = new FibonacciRecursiveTask(n-1);
left.fork();
FibonacciRecursiveTask right = new FibonacciRecursiveTask(n-2);
Integer res1 = right.compute();
Integer res2 = left.join();
return res1 + res2;
}
}
class RecursiveTaskDemo
{
public static void main(String[] args)
{
FibonacciRecursiveTask task = new FibonacciRecursiveTask(44);
ForkJoinPool pool = new ForkJoinPool(8);
Integer res = pool.invoke(task);
System.out.println(res);
}
}
这是只有1个线程的正常顺序。大约快4倍。
class Fib
{
public static void main(String[] args)
{
System.out.println(fib(44));
}
public static int fib(int n)
{
if(n <= 1)
{
return n;
}
return fib(n-2) + fib(n-1);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。