マルチスレッドで実行されているプロセスがあります。
プロセスには、処理するアイテムのスレッドセーフなコレクションがあります。
各スレッドは、コレクションのアイテムをループで処理します。
リスト内の各項目は、スレッドによってストアドプロシージャに送信され、トランザクション内の3つのテーブルにデータが挿入されます(SQL)。1つの挿入が失敗すると、3つすべてが失敗します。トランザクションの範囲はアイテムごとであることに注意してください。
挿入は非常に単純で、IDシードを使用して各テーブルに1行(外部キー関連)を挿入するだけです。読み取りはありません。挿入してから次の項目に進んでください。
それぞれが同じテーブルのセットに挿入しようとしている独自のアイテムを処理しようとしている複数のスレッドがある場合、これによりデッドロック、タイムアウト、またはトランザクションロックによるその他の問題が発生しますか?
スレッドごとに1つのdb接続を使用する必要があることはわかっています。主に、各トランザクションのテーブルのロックレベルに関心があります。1つのスレッドが3つのテーブルに行を挿入しているとき、他のスレッドは待機する必要がありますか?自動IDをインクリメントする必要があることを除いて、テーブルごとの行の依存関係はありません。IDをインクリメントするためのテーブルレベルのロックの場合、他のスレッドが待機する必要があると思います。インサートは時々速いかもしれませんし、そうでないかもしれません。待たなければならない場合、マルチスレッドを実行するのは理にかなっていますか?
マルチスレッドの目的は、アイテムの処理を高速化することです。
あなたの経験を共有してください。
PS:IDシードはGUIDではありません。