非常に大きなテキスト ファイルのセットがあります。タスクは、この巨大なコーパス内のすべての用語について (一意に) ドキュメント頻度 (特定の用語を含むドキュメントの数) を計算することでした。単純に最初のファイルから始めて、すべてをシリアル化された方法で計算するのはばかげているように思えました (私はそれがどれほど悲惨なものであるかを確認するためにやっただけだと認めます)。この計算を Map-Reduce 方式で行うと、つまりデータをより小さな断片にクラスタリングし、最終的に結果を集計すると、結果がはるかに速く得られることに気付きました。
私の PC には 4 つのコアがあるため、データを 3 つの異なるサブセットに分割し、各サブセットを個別のスレッドに供給して、すべてのスレッドが作業を終了するのを待ち、その結果を別のメソッドに渡してすべてを集計することにしました。
非常に小さなデータセットでテストしましたが、問題なく動作しました。実際のデータを使用する前に、その動作をよりよく調査できるように、より大きなセットでテストしました。jvisualvm と htop を起動して、CPU とメモリがどのように機能しているかを確認しました。3 つのスレッドが実行されており、CPU コアもビジーであることがわかります。ただし、これらのコアの使用率が 50% を超えることはめったにありません。これは、アプリケーションが実際には PC の能力をフルに活用していないことを意味します。これは私のコードに関連していますか、それとも本来あるべき姿ですか。私の期待は、各スレッドができるだけ多くの CPU コア リソースを使用することでした。
Ubuntuを使用しています。