1234567891011121314151617181920212223242526272829303132 |
- #pragma once
- #include <library/cpp/unified_agent_client/f_maybe.h>
- #include <util/datetime/base.h>
- namespace NUnifiedAgent {
- // Comment from a non-author:
- // It is based on something similar to https://en.wikipedia.org/wiki/Token_bucket
- class TThrottler {
- public:
- explicit TThrottler(double rate, TDuration updatePeriod = TDuration::MilliSeconds(100));
- TThrottler(double rate, double burst);
- void Consume(double& tokens, TFMaybe<TDuration>& nextCheckDelay);
- bool TryConsume(double tokens);
- void ConsumeAndWait(double tokens);
- private:
- ui64 UpdateTokens();
- private:
- ui64 CyclesPerMillisecond;
- ui64 UpdatePeriod;
- double PeriodTokens;
- double AvailableTokens;
- ui64 ExpirationTime;
- };
- }
|