25个版本 (14个破坏性版本)
0.14.0 | 2024年3月15日 |
---|---|
0.12.0 | 2023年6月10日 |
0.9.0 | 2023年3月31日 |
0.0.1-beta.16 | 2022年12月18日 |
0.0.1-beta.12 | 2022年11月8日 |
#1358 in 进程宏
每月下载量 23
在 3 个crate中使用 (通过 stack-queue)
10KB
148 行
栈队列
一个无堆栈自动批处理队列,通过在线程拥有的环形缓冲区上协商对任务范围的独占访问来提供可延迟的批处理。在任务继续入队直到批处理有界之前,这样做可以延迟到数据库连接获取之后,从而允许进行机会性批处理。这在不产生批处理收集开销、不必要的超时或无用的分配的情况下,在所有工作负载级别上提供最优的批处理。
用法
在使用 local_queue 宏时实现以下之一
TaskQueue
,用于具有每个任务接收器的批处理BackgroundQueue
,用于在没有接收器的情况下进行后台处理任务批处理BatchReducer
,用于收集或减少批处理数据
最佳运行时配置
为了获得最佳性能,请独家使用通过 tokio::main 或 tokio::test 宏配置的Tokio运行时,同时将 crate
属性设置为 async_local
,并在 async-local
上启用 barrier-protected-runtime
功能。这样做配置了Tokio运行时,在关闭时使用屏障将运行时工作线程进行会合,确保任务永远不会超出运行时工作线程拥有的线程局部数据,从而消除了作为寿命扩展手段的 Box::leak 的需要。
基准测试结果 // 批处理16个任务
crossbeam |
flume |
任务队列 |
后台队列 |
tokio::mpsc |
---|---|---|---|---|
1.67 us (✅ 1.00x) |
1.95 us (❌ 1.17x 慢) |
942.72 ns (✅ 1.77x 快) |
638.45 ns (🚀 2.62x 快) |
1.91 us (❌ 1.14x 慢) |
依赖项
~0.6–1MB
~24K SLoC