11 个版本

0.3.7 2023 年 3 月 31 日
0.3.6 2023 年 3 月 30 日
0.2.2 2023 年 3 月 13 日
0.1.0 2023 年 3 月 12 日

#426异步

Download history 1031/week @ 2024-03-14 2119/week @ 2024-03-21 2895/week @ 2024-03-28 1829/week @ 2024-04-04 2916/week @ 2024-04-11 2340/week @ 2024-04-18 2709/week @ 2024-04-25 2375/week @ 2024-05-02 2897/week @ 2024-05-09 2302/week @ 2024-05-16 2361/week @ 2024-05-23 2432/week @ 2024-05-30 2826/week @ 2024-06-06 2620/week @ 2024-06-13 2113/week @ 2024-06-20 1295/week @ 2024-06-27

9,444 每月下载量
用于 tokio-utils

MIT 许可证

23KB
393

管 🛁

github crates.io docs.rs build status codecov

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 中其他对象池进行了基准测试。

这些基准测试有助于我们了解并发控制、对象存储和对象重用等底层机制的效率。

结果如下

基于输入的比较

以下基准测试比较了在不同负载下不同池的性能

all

two

100,000 次获取 & 释放

以下基准测试比较了在任务中运行 100,000 次获取 & 释放操作的性能。

Tub

tub

异步对象池

async-object-pool

简单池

simple-pool

依赖

~2.1–3MB
~49K SLoC