Module Limiter.Throttled_rate_limiter
A Throttled_rate_limiter
combines a Token_bucket
and a Throttle
. Unlike a Token_bucket
, jobs cannot consume variable numbers of tokens, but the number of outstanding jobs is also limited to max_concurrent_jobs
. Like a Throttle
, finish_job
must be called once, and only once, when a job is completed.
type t
= private limiter
val sexp_of_t : t -> Ppx_sexp_conv_lib.Sexp.t
val create_exn : now:Core_kernel.Time_ns.t -> burst_size:int -> sustained_rate_per_sec:float -> max_concurrent_jobs:int -> t
val try_start_job : t -> now:Core_kernel.Time_ns.t -> [ `Start | `Max_concurrent_jobs_running | `Unable_until_at_least of Core_kernel.Time_ns.t ]
val finish_job : t -> now:Core_kernel.Time_ns.t -> unit
Return a token to the hopper (not the bucket). Thus,
max_concurrent_jobs
limits not only the number of opentry_start_job
-finish_job
pairs across time, but also applies to the number of jobs run during the same (1ns) quantum timenow
- whether they finishednow
or not, and regardless of what orderfinish_job
is called for the same timenow
.