Releases
v2.0.0
The 2.0.x release should be considered somewhat unstable.
- Breaking: Complete API redesign. The v1.x classes (
Async::Limiter::Concurrent
,Async::Limiter::Unlimited
, etc.) have been replaced with a new inheritance-based architecture. - Breaking: Removed
blocking?
method due to inherent race conditions. Useacquire(timeout: 0)
for non-blocking checks. - Breaking: Timing strategies now use consumption-only model (no explicit
release
methods). - Breaking: Window classes moved from
limiter/window/
tolimiter/timing/
with renamed classes.
New Architecture (replaces v1.x classes)
- New:
Async::Limiter::Generic
- Unlimited concurrency with timing coordination (replacesAsync::Limiter::Unlimited
). - New:
Async::Limiter::Limited
- Counting semaphore with configurable limits (replacesAsync::Limiter::Concurrent
). - New:
Async::Limiter::Queued
- Queue-based resource distribution with priority/timeout support (completely new functionality).
Advanced Timeout Features
- New: Unified timeout API -
acquire(timeout: 0/nil/seconds)
provides non-blocking and timed acquisition. - New: Precise deadline tracking using
Async::Deadline
(requires async v2.31.0+). - New: Convoy effect prevention - quick timeout operations not blocked by slow operations.
- New: Accurate timeout propagation - remaining time correctly passed through timing and concurrency layers.
Cost-Based Acquisition
- New: Cost-based acquisition -
acquire(cost: 1.5)
for proportional resource consumption. - New: Starvation prevention - validates cost against timing strategy
maximum_cost
capacity. - New: Flexible operation weighting - light operations consume fewer resources than heavy ones.
Enhanced Timing Strategies
- Add
Async::Limiter::Timing::LeakyBucket
for token bucket rate limiting with automatic leaking. - Add
Async::Limiter::Timing::FixedWindow
for discrete time boundary enforcement. - Rename
Async::Limiter::Timing::Window
toAsync::Limiter::Timing::SlidingWindow
for clarity. - Breaking: Remove
release
methods from timing strategies (consumption-only model). - Breaking: Remove
try_acquire
methods from timing strategies (unified timeout API).
Token-Based Resource Management
- New:
acquire_token
method returnsToken
objects for advanced resource management. - New: Token re-acquisition with different options -
token.acquire(priority: 5)
. - New: Automatic token cleanup with block usage.
Thread Safety and Performance
- New: Race condition elimination by moving timing coordination inside mutex.
- New: Fast path optimizations using
deadline.expired?
checks. - New: Atomic timing coordination prevents race conditions in concurrent access.
- Improved: Test performance using time simulation instead of actual sleep calls.