30 个版本
0.14.6 | 2024年5月31日 |
---|---|
0.14.4 | 2024年3月21日 |
0.12.0 | 2023年6月10日 |
0.9.0 | 2023年3月31日 |
0.0.1-beta.12 | 2022年11月8日 |
#295 在 数据结构
220 每月下载量
在 2 个包中使用 (通过 redis-swapplex)
64KB
2K SLoC
Stack Queue
一个(主要是)无堆自动批量队列,通过协商对线程拥有的循环缓冲区上的任务范围进行独占访问来实现可延迟的批量处理。在将任务入队直到批次边界的情况下,可以在获取数据库连接后延迟处理,从而允许进行机会性批量处理。这种方法在所有工作负载级别上提供最佳批量处理,没有批量收集开销、不必要的超时或不必要的分配。
使用方法
在使用 local_queue 宏时实现以下之一
TaskQueue
,用于具有每个任务接收器的批量处理BackgroundQueue
,用于无接收器的前景处理任务批次BatchReducer
,用于收集或减少批量数据
最佳运行时配置
为了获得最佳性能,请独家使用通过 tokio::main 或 tokio::test 宏配置的 Tokio 运行时,将 crate
属性设置为 async_local
,同时启用 async-local
上的 barrier-protected-runtime
功能。这样做会将 Tokio 运行时配置为具有一个屏障,在关闭期间会会合运行时工作线程,从而确保任务不会比运行时工作线程拥有的线程本地数据寿命更长,从而消除了作为寿命扩展备用手段的 Box::leak 的需求。
基准测试结果 // 批量处理 16 个任务
crossbeam |
flume |
TaskQueue |
tokio::mpsc |
---|---|---|---|
576.33 ns (✅ 1.00x) |
656.54 ns (❌ 慢1.14倍) |
255.33 ns (🚀 快2.26倍) |
551.48 ns (✅ 快1.05倍) |
依赖项
~3–32MB
~478K SLoC