簡體   English   中英

關於fork-join框架

[英]About fork-join framework

作為方法fork(); compute() ,每當方法compute()發生時,怎么會被稱為另一個並行度? 是否有布爾標志? 編輯:

重寫類的方法compute() RecursiveTask :(偽代碼)

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已被激活?

提前致謝。

看看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線程執行較低級別的任務(在二叉樹上較低),為您提供所需的並行性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM