0

短い Map-Reduce プログラムを実装する必要があります。実行する必要がある操作の 1 つは、txt ファイルを X 部分に分割することです。これにより、ファイル フラグメントに対して読み取り操作のみを実行するときに、各部分が Map 関数の入力として使用されます。

ファイルを複数のローカル ファイルに分割し、各ファイルを Map 関数の入力として使用できます。しかし、私はこの解決策を試すことを考えています: ファイル内の異なる場所で InputStream を使用して構築された X スキャナーでファイルを分割します。

各スレッドが Scanner オブジェクトを使用する場合、同期の問題は発生しますか? 各スレッドが同じファイルにアクセスしようとしているため、処理が遅くなるでしょうか?

4

1 に答える 1

0

原則として、注意を払えば、オペレーティング システムで許可されていれば、これを実行できるはずです。スレッドごとに、ファイルで BufferedReader を開き、それぞれの FileChannel オブジェクトを (BufferedReader.getChannel() を介して) 取得し、そのスレッドが処理しようとしている部分をロックすることをお勧めします(FileChannel.lock() を参照)。O/S でここまでできれば、実際に問題は発生しないはずです。

ただし、この方法でパフォーマンスが向上するかどうかは疑問です。可能であれば、パフォーマンスの観点から、単一のスレッドがファイルを介して実際の読み取りをシリアルに実行し、スレッドごとにスキャナーを操作するスレッドプールに応じて順次行をファーミングする方が良いと思います。

于 2012-11-25T01:32:59.003 に答える