0

こんにちは私はJavaのマルチスレッドを介して多数のファイルを処理する必要があります。ファイルはランダムなサイズ(最小:100 MB、最大:1.5GB)になります。構成では、最大で8つのスレッドしか作成できず、各スレッドにはソースディレクトリからの処理用に8つのファイルが割り当てられます。問題が発生する場合があります。巨大なファイルがシングルスレッド自体に割り当てられるため、パフォーマンスが低下します。すべてのスレッドが同じサイズを処理するように、ファイルをスレッドに割り当てる方法があるかどうかを知りたいです。つまり、ファイルサイズに基づいてスレッド間の負荷を分散したいということです。

前もって感謝します :)

4

1 に答える 1

0

実際にはシングルスレッドI/Oよりも低速であるため、単一のメカニカルディスクからパラレルI/Oを実行することはできません。この辺りにはそれを説明する答えがたくさんあります。基本的に、ディスクのメカニカルヘッドは、次の読み取り位置を探すために毎回回転する必要があります。これはコストのかかる操作です。これを並行して行うと、各スレッドが順番に実行されるときに頭をバウンドさせるだけです。

最善のアプローチは、単一のプロデューサースレッドを使用してファイルを1つずつ順番に読み取り、ワーカースレッドのプールを使用してそれらを並列に処理することです。

于 2012-06-21T08:28:42.713 に答える