Concurrency & rate limits
Limit how many jobs run at once and how often they start.
Concurrency & rate limits
Max concurrent jobs
maxConcurrent caps how many jobs run at the same time (default: no limit).
const limiter = new RateLimiter({ maxConcurrent: 3 });
// Up to 3 of these run at once; the rest wait.
for (let i = 0; i < 10; i++) {
limiter.schedule(() => doWork(i));
}
Minimum time between jobs
minTime is the minimum gap (in ms) between starting each job.
const limiter = new RateLimiter({
maxConcurrent: 1,
minTime: 200, // start at most one job every 200ms
});
Max per interval
To cap jobs per time window (e.g. 60 per minute):
const limiter = new RateLimiter({
maxPerInterval: 60,
interval: 60_000, // 1 minute
});
Reservoir (token bucket)
A reservoir is a fixed pool of “tokens”. Each job consumes one; when the pool is empty, jobs wait until you refill.
const limiter = new RateLimiter({
reservoir: 10,
reservoirRefreshInterval: 60_000, // refill every minute
reservoirRefreshAmount: 10,
});
You can also set or add tokens yourself with updateReservoir(value) and incrementReservoir(amount).
Next: Priority & wrapping.