グラフを作成するために互いに比較する必要がある N 個の要素があります。合計で(N*N-1)/2 回の比較が得られます。
これらの比較をマルチスレッド化したいのですが、いくつかの制約もあります。
各要素は非常に大きく、実際には行列であるため、各スレッドのすべての要素をコピーするとメモリが大量に消費されます。
各比較が発生する必要があります。つまり、1 つをスキップすることはできません。
新しい要素がリストに追加されるたびに、何が行われたかを追跡し、新しい要素だけを実行する必要があるため、これは非常に注意が必要です。
比較の数は 2000 万のように膨大になる可能性があるため、キューをそれほど大きくすることはできません。
最後に、いつでもプロセスを停止できます。アプリの他の実行中であっても、再開できる必要があります。
これまでのところ、スレッドプールにすべての要素といくつかのワーカーを含むマスタースレッドがあります。ワーカー スレッドは、ペアのリストまたは要素の範囲を比較します。次のX回の比較をオンデマンドで提供する比較ジェネレーターについて考えています。
このジェネレーターをどのように構築できますか?
ワーカーのすべてのペアをコピーし、ワーカーから直接 ReadWriteLock を使用して Master からデータを読み取る必要がありますか?
すべてのスレッドの進行状況を追跡するにはどうすればよいですか?
比較の状態を停止して再開するにはどうすればよいですか?
質問が多くてすみません。ありがとうございました !