我写了以下代码段:
static private int counter;
public void compute()
{
if (array.length<=500)
{
for(int i = 0;i<array.length;i++){
counter++;
System.out.println("Ciao this is a recursive action number"+ counter+Thread.currentThread().getName());
}
}
else{
int split = array.length/2;
RecursiveActionTry right = new RecursiveActionTry(split);
RecursiveActionTry left = new RecursiveActionTry(split);
invokeAll(right, left);
我看到它会自动分叉我传递给invokeAll()
的两个对象之一。RecursiveActionTry
我的笔记本电脑只有 2 个核心。如果我有 4 个核心并启动 4 个任务……invokeAll(right, left, backward, forward);
我会使用所有 4 个核心吗?无法知道,因为我只有 2 个核心。
我还想知道在幕后调用compute()
第一个参数(右)和fork + join
第二个参数(左)是否调用所有(右,左)。(就像在 RecursiveTask 扩展中应该那样)。否则它不会使用并行性,不是吗?顺便说一句,如果有超过 2 个参数.. 它会调用compute()
第一个参数并分叉所有其他参数吗?
提前致谢。