何千もの実行中の Timer オブジェクト (Reactive RX の Observable.Interval 拡張メソッドの呼び出しによって舞台裏で生成される) を持つことについて、パフォーマンスに関する考慮事項はありますか? これは、サーバー アプリケーション用です。同時に実行される可能性のあるタイマーの数は、数千から数万になります。
4 に答える
私は Reactive フォーラムで質問をしました。 これが答えです
ここで引用すると、答えは次のとおりです。
メモリからは、タイミングを処理する単一のスレッドがあり、スケジュールされたすべてのオブザーバブルを追跡する単一の優先ヒープがあります。それは信じられないほどうまくスケーリングします。したがって、何万もの
Observable.Interval
クエリがあっても、実際のタイマーは 1 つと、それをすべて管理する実際のスレッドは 1 つしかありません。
しないでください。有効期限のタイムスタンプを使用してリストに追加し、スレッドを使用してリストを処理することをお勧めします。
最も明白なことは、同時に処理できるタイマー イベントの数が CPU コアの数によって制限されることです。同時にトリガーされるイベントが多すぎると、それらはキューに入れられ、かなりの遅延で処理される可能性があります。
また、同時に開始されるスレッドが多すぎると、コンテキストの切り替えによって多くのオーバーヘッドが発生するため、オーバーヘッドと、非常に多くのスレッドが CPU 時間を分割する必要があるという事実の両方から、ハンドラーの実行が遅くなります。 .
単一のタイマーを実行できるかどうかを検討し、論理タイマーのリストを処理できるようにします。