【发布时间】:2013-05-31 11:55:52
【问题描述】:
作为compute() 中的方法fork();,为什么每次出现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 已经被激活?
提前致谢。
【问题讨论】:
-
Unclear...你能写一些伪代码显示你不理解的代码路径和你不理解的内容吗?
-
确定编辑答案
-
fork()仅在array.length >= 100时被调用。你还需要什么逻辑? -
我明白了。但是我只想知道是否有一个标志显示“在第一次调用 fork() 后不再为其他调用更改 CPU。)
-
不换CPU是什么意思?
标签: java multithreading fork-join