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秒かかります。それを50,000倍してください...
私は以前に何もマルチスレッドを行ったことはありませんでしたが、私は私がすれば私はかなり良いスピードの増加を得ることができます。どのように私は効果的にこのメソッドを並列化することができますいくつかのポインタを誰も与えることができますか?
どのくらいのファイルが処理されていますか?私は、ディスクからファイルを読み込むのにもっと時間がかかると、実際にスレッド化することで実際には得られないからです。 – SimonC
ディスクバインドの可能性があるタスクを並列化することによるスピードアップはありません。別の物理ドライブにあるディレクトリを並列化しようとしている場合を除き... – Mysticial
出力を1つのファイルにするのか、ファイルごとに行うのですか? – MahdeTo