23 releases (10 breaking)
|0.12.0||Jun 10, 2023|
|0.10.0||Apr 7, 2023|
|0.9.0||Mar 31, 2023|
|0.0.1-beta.16||Dec 18, 2022|
|0.0.1-beta.12||Nov 8, 2022|
#508 in Rust patterns
112 downloads per month
Used in 2 crates (via redis-swapplex)
A heapless auto-batching queue featuring deferrable batching by way of negotiating exclusive access over task ranges on thread-owned circular buffers. As tasks continue to be enqueued until batches are bounded, doing so can be deferred until after a database connection has been acquired as to allow for opportunitistic batching. This delivers optimal batching at all workload levels without batch collection overhead, superfluous timeouts, nor unnecessary allocations.
Impl one of the following while using the local_queue macro:
TaskQueue, for batching with per-task receivers
BackgroundQueue, for background processsing task batches without receivers
BatchReducer, for collecting or reducing batched data
Optimal Runtime Configuration
For best performance, exclusively use the Tokio runtime as configured via the tokio::main or tokio::test macro with the
crate attribute set to
async_local while the
barrier-protected-runtime feature is enabled on
async-local. Doing so configures the Tokio runtime with a barrier that rendezvous runtime worker threads during shutdown in a way that ensures tasks never outlive thread local data owned by runtime worker threads and obviates the need for Box::leak as a means of lifetime extension.
Benchmark results // batching 16 tasks
This crate conditionally makes use type_alias_impl_trait and impl_trait_in_assoc_type to allow async fns in traits to be unboxed. To compile on
boxed feature flag can be used to downgrade async_t::async_trait to async_trait::async_trait.