void do(List<D> d, final List<C> c) {
for (D datum : d)
getChampoid(datum, c).tally(datum);
並行:
static final int procs = Runtime.getRuntime().availableProcessors();
static final ExecutorService pool = Executors.newFixedThreadPool(procs);
void do(List<D> d, final List<C> c) {
List<Future> futures = new ArrayList<>();
for (final D datum : d)
futures.add(pool.submit(new Runnable() {
@Override
public void run() {
getChampoid(datum, c).tally(datum);
}
}));
for (Future f : futures)
try {
f.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
我因爲難倒我,他們看起來就像他們做同樣的事情,其水貨版本應該只是速度更快,但它是一個數量級幅度較慢。有什麼想法嗎?
僅供參考d和c都是巨大的列表,有數千到數十萬個項目。
您究竟知道運行速度如何? – chrylis
在第一個代碼片段中,您將列表'd'傳遞給'tally()',而在第二個代碼片段中傳遞列表項'datum'。這是一個版本還是其他版本的錯字? –
不可能說爲什麼,因爲你沒有提供足夠的信息。 – david