非常に大規模なアプリケーションでメモリの急増を修正しようとしています。これがメモリにどの程度の影響を与えるかはわかりませんが、次のことに気づきました。
- アプリケーションはカスタムスレッドプールを使用して、すべての高価なタスクを実行します
- アプリケーションはすべての着信タスクを実行します
- タスクは、何千ものサブタスクで構成できます
- スレッドプールは一度に{T}タスクのみを実行し、新しいタスクを開始する前にタスクを完全に終了しますが、新しいシステムスレッド(スレッドクラス)を作成し、それに追加されたすべてのサブタスクに対して開始します
- サブタスクシステムスレッドは、スレッドプールスロットが解放されるまで手動リセットイベント(MRE)を即座にブロックするスレッド開始で開始されます。
したがって、このスレッドプールは数千のスレッドを作成できますが、他のタスクが完了する間、30を除くすべて(または構成したもの)がMREでブロックされます。
私の質問:
MREでブロックされた1000のスレッドは、メモリ/プロセッサにどのような影響を与えますか?このスパイクを修正する時間はあまりないので、それが最小限である場合は、問題を残して、時間があれば後のパッチで修正するように努めます。
また、この動作はスレッドプールで一般的ですか、それともこのサウンドに欠陥がありますか(私は欠陥に傾いていますが、確かに十分な背景がありません)。