對於一個分配,我必須實現一個Java程序,當它與多個線程一起運行實際上比只有1時慢。我知道創建線程需要一些開銷,但在本例中我正在處理20,000 x 20,000的大數組。沒有依賴關係,所以創建4個較小的塊並同時運行它們的好處應該始終超出創建線程的成本嗎?什麼時候1個線程的運行速度會比多個線程同時運行的要快
for (int i = 0; i < numThreads; i++) {
// for each iteration of the body's for loop,
// calculate the starting and ending indexes
// of the ith chunk of the y dimension of
// the anArray array
final int indexStart = i * chunkSize;
final int indexEnd = (i + 1) * chunkSize;
// each "execute" method of the Executor class
// creates a new object of type Runnable ...
// be careful with the parentheses here ... the
// entire next code block is being passes
// as a parameter to the execute method
ex.execute(new Runnable() {
// The run() method is declared abstract in the Runnable
// class, so it MUST be overriden. The body of the
// run method is the "code" that each thread executes
@Override
public void run() {
for (int j=0; j<anArray.length; j++){
for (int k = indexStart; k < indexEnd; k++){
anArray[j][k] = anArray[j][k] * anArray[j][k]/3.45 * Math.sqrt(anArray[j][k]);
}
} // end for
} // end run
}
);
}
我們的任務是修改只有最裏面的循環中,我們可以做什麼都希望我們在那裏,但它有當多個線程執行,使運行速度較慢。具有8個線程的上限。 我真正的問題是在實現多個線程時可能導致更多的問題。我已經做了一些研究,發現你可以使用單線程來使用大多數的CPU,所以創建更多不會幫助,這怎麼可能。
是否有可以創建的線程數的上限?如果沒有,那麼你可以在每次迭代(或其混合)上創建一個線程。 – txtechhelp
應該是一個8的上限 – user3267256
你說'*它必須使運行時運行速度較慢,執行時少線程*'。而你的頭銜似乎相反......你想要什麼? – smwikipedia