ドキュメントには、「ホイールごとのデフォルトの目盛り数 (つまり、ホイールのサイズ) は 512 です。多くのタイムアウトをスケジュールする場合は、より大きな値を指定できます。」
デフォルトでは 512 タイムアウトしか処理できないということですか? 25 秒の 10 万回のタイムアウトが必要な場合 ( SockJSの場合)、ホイールごとのティック数にどの値を設定すればよいですか?
ホイールは基本的に、ハッシュ関数が「通知時間」である個別の連鎖を持つハッシュテーブルです。独立した連鎖は無制限の順序付きセットとして実装されるため、ホイールは事実上無制限の数のタイムアウトを保持できます。
遠い将来にタイムアウトするタイムアウト (つまり、大きな遅延) をスケジュールする場合、大きな遅延は で割り、wheelSize * tickDuration
その余りをタイムアウトのハッシュとして使用します。したがって、ホイールの現在のスロットは、次の時間内に期限が切れるtickDuration
タイムアウトと、ミリ秒で期限が切れるタイムアウトの両方を保持できます。この場合、タイマー スレッドがホイールを反復処理するにつれて(tickDuration * wheelSize * n)
変数が減少します。n
後者は、タイマー スレッドがスロットを訪問するときに CPU 時間をいくらか消費します。(これは、従来のハッシュテーブルの衝突に似ています)。衝突の可能性を減らすために、ホイールのサイズを大きくすることができます。
たとえば、スケジュールされたほとんどのタイムアウトが 1 分以内に期限切れになることが確実な場合は、wheelSize * tickDuration
1 分 (例: 600 スロット * 100 ミリ秒) にすることができます。
ハッシュド ホイールの詳細については、こちらをお読みください。