我編寫了一個非常簡單的Java應用程序,它執行一些md5哈希計算。 我試圖將這些計算分發給我的實驗室中的幾個節點,以加快速度。 這實際上工作,但它的分佈如何造成我的麻煩。 網格中有8個節點只有一個節點。 我想爲每個節點的每個CPU分配一個作業(線程,可調用,任務)。但是,我得到了一個非常糟糕的分佈:有時4個作業在一個CPU上運行,而具有8個cpu的節點只有2或3個任務。 我發現forPredicate(GridPredicate p)的函數的GridGain API(forPredicate in GridGain API)中:GridGain根據CPU分配任務投影中可用的節點數
創建網格投影其包括通過給定的過濾器謂詞的所有節點。
但是,我使用它錯了,或者我得到它的功能錯誤。這裏是什麼,我得到了一個小例子:
public class Driver implements GridCallable<Integer>{
[...]
Grid g = GridGain.start(gConf);
ArrayList<GridFuture<Integer>> workers = new ArrayList<GridFuture<Integer>>();
for(int i=0; i<workercount; i++){
Driver worker = new Driver();
//Here some values get added to the driver object, irrelevant
workers.add(g.forPredicate(new GridPredicate<GridNode>() {
@Override
public boolean apply(GridNode node) {
int cores = node.metrics().getTotalCpus();
return ((node.metrics().getCurrentWaitingJobs()+node.metrics().getCurrentActiveJobs()) < cores);
}
}).compute().call(worker));
}
[...]
public Integer call(){[...]}
}
預期的行爲是,它會檢查每個節點這得花多少的CPU了,並檢查jobcount(主動和等待)是大於這個數在發送作業之前到它。 但事實並非如此。我仍然得到「不良分佈」。 任何人都可以告訴我如何根據每個節點可用的CPU數量進行分配嗎? 感謝您的幫助和時間!