RateLimitedDispatcher
public final class RateLimitedDispatcher : RateLimitedDispatcherBase
A PromiseKit
Dispatcher
that dispatches X closures every Y seconds,
on average.
This implementation is O(1) in both space and time, but it uses approximate time accounting. Over the long term, the rate converges to a rate of X/Y, but the transient burst rate will be up to 2X/Y in some situations.
For a completely accurate rate limiter that dispatches as rapidly as
possible, see StrictRateLimitedDispatcher
. That implementation requires
additional storage.
Executions are paced by start time, not by completion, so it’s possible to end up with more than X closures running concurrently in some circumstances.
There is no guarantee that you will reach a given dispatch rate. There are not an infinite number of threads available, and GCD scheduling has limited accuracy.
100% thread safe.
-
A
PromiseKit
Dispatcher
that dispatches X executions every Y seconds, on average.This version is O(1) in space and time but uses an approximate algorithm with burst rates up to 2X per Y seconds. For a more accurate implementation, use
StrictRateLimitedDispatcher
.Declaration
Swift
override public init(maxDispatches: Int, perInterval interval: TimeInterval, queue: Dispatcher = DispatchQueue.global())
Parameters
maxDispatches
The number of executions that may be dispatched within a given interval.
perInterval
The length of the reference interval, in seconds.
queue
The DispatchQueue or Dispatcher on which to perform executions. May be serial or concurrent.
-
Undocumented
Declaration
Swift
public convenience init(maxDispatches: Int, perInterval interval: TimeInterval, queue: DispatchQueue)