次のスニペットを書きました。
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);
渡した 2 つのオブジェクトinvokeAll()
のうちの 1 つを自動的にフォークすることがわかります。RecursiveActionTry
私のラップトップには 2 つのコアしかありません。4 つのコアがあり、4 つのタスクを起動した場合はどうなりinvokeAll(right, left, backward, forward);
ますか?4 つのコアすべてを使用しますか? コアが2つしかないのでわかりません。
また、舞台裏で invokeAll(right, left)compute()
が最初の引数 (右) とfork + join
2 番目の引数 (左) を呼び出すかどうかも知りたいです。(RecursiveTask 拡張機能のように)。そうでなければ、並列処理を使用しないでしょうか? ちなみに、2 つ以上の引数がある場合はcompute()
、最初の引数を呼び出して、他のすべての引数をフォークしますか?
前もって感謝します。