4

ドキュメントには、「ホイールごとのデフォルトの目盛り数 (つまり、ホイールのサイズ) は 512 です。多くのタイムアウトをスケジュールする場合は、より大きな値を指定できます。」

デフォルトでは 512 タイムアウトしか処理できないということですか? 25 秒の 10 万回のタイムアウトが必要な場合 ( SockJSの場合)、ホイールごとのティック数にどの値を設定すればよいですか?

4

1 に答える 1

9

ホイールは基本的に、ハッシュ関数が「通知時間」である個別の連鎖を持つハッシュテーブルです。独立した連鎖は無制限の順序付きセットとして実装されるため、ホイールは事実上無制限の数のタイムアウトを保持できます。

遠い将来にタイムアウトするタイムアウト (つまり、大きな遅延) をスケジュールする場合、大きな遅延は で割り、wheelSize * tickDurationその余りをタイムアウトのハッシュとして使用します。したがって、ホイールの現在のスロットは、次の時間内に期限が切れるtickDurationタイムアウトと、ミリ秒で期限が切れるタイムアウトの両方を保持できます。この場合、タイマー スレッドがホイールを反復処理するにつれて(tickDuration * wheelSize * n)変数が減少します。n後者は、タイマー スレッドがスロットを訪問するときに CPU 時間をいくらか消費します。(これは、従来のハッシュテーブルの衝突に似ています)。衝突の可能性を減らすために、ホイールのサイズを大きくすることができます。

たとえば、スケジュールされたほとんどのタイムアウトが 1 分以内に期限切れになることが確実な場合は、wheelSize * tickDuration1 分 (例: 600 スロット * 100 ミリ秒) にすることができます。

ハッシュド ホイールの詳細については、こちらをお読みください

于 2013-01-10T05:43:23.160 に答える