我正在製作一個系統。這是一個複雜的系統,但它歸結爲一個Solver
類這樣的方法:該方法有望如何讓此Java代碼可並行化?我如何使它變得易變
public int solve(int problem); // returns the solution, or 0 if no solution found
現在,當系統啓動並運行,約5秒的運行時間,是完全足夠快。不過,我計劃運行一些測試,看起來有點像這樣:
List<Integer> problems = getProblems();
List<Integer> solutions = new ArrayList<Integer>(problems.size);
Solver solver = getSolver();
for (int problem: problems) {
solutions.add(solver.solve(problem));
}
// see what percentage of solutions are zero
// get arithmetic mean of non-zero solutions
// etc etc
的問題是我想在大量問題上運行這一點,不想永遠等待結果。所以說,我有一百萬的測試問題,我想在測試中它需要我做一杯茶的時間內完成,我有兩個問題:
說我有一萬芯處理器和實例
Solver
是線程安全的,但沒有鎖定(它們是不可變的或其他),並且它們所做的所有計算都在內存中(即沒有磁盤或網絡或其他內容)。我可以用線程安全列表替換解決方案列表並啓動線程來解決每個問題,並期望它更快嗎?快多少?它可以在5秒內運行嗎?是否有一個體面的雲計算服務在那裏的Java,我可以購買500萬秒的時間,讓這個代碼運行在五秒鐘?我需要做什麼來準備我的代碼以在這樣的雲上運行?無論如何,500萬秒的成本是多少?
謝謝。
我發現我對這個評論有點晚了,但我認爲它可能仍然相關;你如何評價一個`CachedThreadPool`到一個`FixedThreadPool`,其中poolize被設置爲可用內核的數量? – posdef 2012-02-14 16:47:15