これは私の最初の投稿なので、ガイドラインを見逃している場合はご容赦ください。
その場でキーを調整するためのソリューションを実装しています。これは、すべてのリクエストの前にロックする必要がある辞書を中心に展開しています (複数のスレッドが同じキーを同時に要求して変更できるため)。予想どおり、ディクショナリ内のアイテムの数は重要ではありませんが、使用されているスレッドの数によってロックの競合が増加します。
ディクショナリをロックできない場合は、呼び出し元を遅らせないように、OK を返します。ロックが成功するたびに約 5us、失敗すると約 600us かかります。そのため、ロックの競合によって、スロットルされた可能性のあるキーの処理が許可されるだけでなく、多くの時間がかかります。ロック メカニズムは Monitor.TryEnter を使用しています。
テスト パラメータ: ディクショナリ内の 20,000 項目、均等加重
10 スレッドで 140k tps、ロック競合 6% 20 スレッドで 90k tps、10% ロック競合 30 スレッドで 80k tps、14% ロック競合
これらは途方もなく高い TPS 値であり、単一のボックスでは決してヒットしない可能性がありますが、TPS が低くても、アクセスするスレッドの数が多い場合は問題が残ります。
この状況を改善する最善の方法は何でしょうか? おそらく、複数の辞書に対して個別のロックを備えたシャーディング メカニズムを使用し、使用する辞書を見つけるために個別のルックアップを行うことができますか?
ありがとう :)