私はチャンクベースの分割、タスクキュー(例:ExecutorService
)とプライベートハッシュテーブルを使用して重複を収集します。
プール内の各スレッドは、要求に応じてキューからチャンクを取り出し、プライベートハッシュテーブル内のアイテムのキーに対応する値に1を加算します。最後に、グローバルハッシュテーブルとマージします。終わり
だけハッシュテーブルを解析し、キーが3のチャンクサイズとアイテムと例えば1
より大きい値を有する参照:
1 2 2 2 3 4 5 5 6 6
2を持っていると仮定プール内のスレッド。スレッド1は1 2 2をとり、スレッド2は2 3 4になります。プライベートハッシュテーブルは次のようになります。
1 1
2 2
3 0
4 0
5 0
6 0
と
1 0
2 1
3 1
4 1
5 0
6 0
次へ]を、スレッド1は5 6と、スレッド2が6を処理する処理します:
1 1
2 2
3 0
4 0
5 2
6 1
と
1 0
2 1
3 1
4 1
5 0
6 1
最後に、重複は2です、5と6:
1 1
2 3
3 1
4 1
5 2
6 2
これは、各スレッドのプライベートテーブルにスペースある程度の量を取るかもしれませんが、スレッドが最後にマージ・フェーズまで、並列に動作することができます。
私が推測しているのは、すでにマルチスレッドをソートしていない限り、ソートされたリストを1つのスレッドでループするのはソートよりも高速です(ループにはまだ必要です)。ここでマルチスレッドを使用する必要があると思いますか? –
はい、私はすでに何とかマルチスレッドのソートを行っています。そして、はい、それは最高の使用法ではない場合でも、要件です:) – Igor222
そうであれば宿題タグでこれをマークしてください。 – Gray