11 个版本
0.3.7 | 2023 年 3 月 31 日 |
---|---|
0.3.6 | 2023 年 3 月 30 日 |
0.2.2 | 2023 年 3 月 13 日 |
0.1.0 |
|
#426 在 异步
9,444 每月下载量
用于 tokio-utils
23KB
393 行
管 🛁
Rust 的一个 极快 对象池。
值异步地从池中检索。当检索的值超出作用域时,该值将返回到池中。
文档
阅读关于公共 API 的信息:docs.rs/tub
阅读关于设计的信息:wcygan.io/post/pools
使用方法
要使用 Tub,请将以下内容添加到您的 Cargo.toml 中
[dependencies]
tub = "0.3.7"
然后创建并使用池,如下所示
use tub::Pool;
#[tokio::main]
async fn main() {
// Create a pool
let pool: Pool<Box> = (0..10)
.map(|_| Box { value: 123 })
.into();
// Get a value from the pool
let mut box1 = pool.acquire().await;
// Use the value
box1.foo();
// Modify the value
*box1 = Box { value: 456 };
// Return the value to the pool
drop(box1);
}
struct Box {
value: u32
}
impl Box {
fn foo(&mut self) { }
}
基准测试
在"Pools"博客文章中,我对 Tub 与 Rust 中其他对象池进行了基准测试。
这些基准测试有助于我们了解并发控制、对象存储和对象重用等底层机制的效率。
结果如下
基于输入的比较
以下基准测试比较了在不同负载下不同池的性能
100,000 次获取 & 释放
以下基准测试比较了在任务中运行 100,000 次获取 & 释放操作的性能。
Tub
异步对象池
简单池
依赖
~2.1–3MB
~49K SLoC