25 releases (14 breaking)

0.14.0 Mar 15, 2024
0.12.0 Jun 10, 2023
0.9.0 Mar 31, 2023
0.0.1-beta.16 Dec 18, 2022
0.0.1-beta.12 Nov 8, 2022

#1170 in Procedural macros

Download history 5/week @ 2024-02-06 2/week @ 2024-02-13 61/week @ 2024-02-20 22/week @ 2024-02-27 1/week @ 2024-03-05 158/week @ 2024-03-12 24/week @ 2024-03-19 33/week @ 2024-03-26 115/week @ 2024-04-02

176 downloads per month
Used in 3 crates (via stack-queue)

MIT license

10KB
148 lines

Stack Queue

License Cargo Documentation

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.

Usage

Impl one of the following while using the local_queue macro:

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

crossbeam flume TaskQueue BackgroundQueue tokio::mpsc
1.67 us (✅ 1.00x) 1.95 us (❌ 1.17x slower) 942.72 ns (✅ 1.77x faster) 638.45 ns (🚀 2.62x faster) 1.91 us (❌ 1.14x slower)

Dependencies

~0.7–1.1MB
~26K SLoC