我需要用Java編寫一個程序,它將讀取目錄樹中相對大量(〜50,000個)文件,處理數據並將處理後的數據輸出到單獨的(平坦的)目錄。並行讀取和寫入多個文件
目前,我有這樣的事情:
private void crawlDirectoyAndProcessFiles(File directory) {
for (File file : directory.listFiles()) {
if (file.isDirectory()) {
crawlDirectoyAndProcessFiles(file);
} else {
Data d = readFile(file);
ProcessedData p = d.process();
writeFile(p,file.getAbsolutePath(),outputDir);
}
}
}
我只想說,每個這樣的方法被刪除,下調爲便於閱讀,但他們都做工精細。整個過程工作正常,但速度很慢。數據處理通過遠程服務進行,需要5-15秒。乘以5萬...
我從來沒有做過任何事情多線程之前,但我想我可以得到一些相當不錯的速度提高,如果我這樣做。任何人都可以提供一些指導我如何有效地平行這種方法?
文件的大小和處理的密度如何?我問,因爲如果有更多的時間花在從磁盤讀取文件上,那麼你實際上不會在線程中獲得太多的收益。 – SimonC 2012-01-05 05:01:05
對於幾乎可以確定爲磁盤綁定的任務,您不太可能獲得任何加速。除非您試圖並行化位於不同物理驅動器上的目錄... – Mysticial 2012-01-05 05:02:00
您是將輸出轉換爲單個文件還是每個文件的文件? – MahdeTo 2012-01-05 05:13:56