にデータを保存するためにLinked List
実装を使用しています。それは非常に大きく、私はそれをいくつかの領域に分割し、それを使用して別のプロセッサに送信し、処理用のスレッドを作成しています.システムには80個のコアがあり、現在20個のスレッドを作成しています. 各スレッドは、数百万のインスタンスから少なくとも 100 万のインスタンスを処理する必要があります。データは次のように分割されます。ArrayList
Java
subList
List<List<Integer>> totalInstances = new ArrayList<List<Integer>>();
//fill the data in totalInstances
List<List<Integer>> instanceSet1 = totalInstances.subList(index1,index2);
List<List<Integer>> instanceSet2 = totalInstances.subList(index2,index3);
....................
等々。そんな20セットを作りました。処理はほとんど非同期です。いくつかの同期がありますが、まれに発生するようです.このデータセットで行われるのは読み取り操作のみです.サブリストから各例を読み取るためのトレッドに参加していません. スレッドは、対応するインスタンスのリスト内のすべてのインスタンスを読み取った後、次の結合に入るためにのみ同期されます。それでも、処理中に一時停止しています。各スレッドが 1 つのインスタンスを読み取り、しばらく待ってから別のインスタンスを読み取るときに発生します。スレッド。その理由は何ですか?
- リンクリストを使用しているためですか?
- すべてのスレッドがアクセスするインスタンスを出力しています
I/O
。操作がマルチスレッド プロセスを妨げると聞いています。 - それに適したデータ構造はありますか?
- パフォーマンスの障害を見つけるためのデバッグ ツールはありますか?
前もって感謝します