這可能是一個非常簡單的問題,但是因爲我從未與線程一起工作過,所以我認爲最好問問題而不是嘗試完全依靠自己找到最佳解決方案。Java - 多線程一個大循環
我有一個巨大的for
循環運行幾十億次。在循環運行中,根據當前的index
,程序以數字形式計算最終結果。我只對存儲頂部result
(或頂部x個結果)及其相應的索引感興趣。
我的問題很簡單,在線程中運行此循環的正確方式是什麼,因此它使用所有可用的CPU /內核。
int topResultIndex;
double topResult = 0;
for (i=1; i < 1000000000; ++i) {
double result = // some complicated calculation based on the current index
if (result > topResult) {
topResult = result;
topResultIndex = i;
}
}
該計算是完全獨立的每個索引,沒有資源共享。每個線程都會明顯訪問topResultIndex
和topResult
。
*更新:Giulio's和rolfl的解決方案都很好,也非常相似。只能接受其中之一作爲我的回答。
計算是否獨立於每個索引或將要共享資源進行計算? – Jeffrey
對於每個索引,計算是完全獨立的 – SportySpice
如果循環受CPU限制,多線程*將*增加其速度(按Amdahl定律給出的一個因子)。如果瓶頸是內存,它將無法工作(因爲多線程不會使內存運行得更快) –