#tokio #future #async #non-blocking #concurrency

bounded_join_set

为Tokio提供的并发限制JoinSet

1个不稳定版本

0.1.0 2023年8月20日

#1848异步

MIT 协议

13KB
126

bounded_join_set

为Tokio提供的并发限制JoinSet。

![MIT协议][mit-badge] ![构建状态][actions-badge]

bounded_join_set 库为Tokio的 JoinSet 提供了一个简单的包装,具有可配置的并发限制。它公开了与本地 JoinSet 相同的API,但确保无论添加到集合中的任务有多少,只有根据并发限制预定的数量将被并发轮询。

为什么使用 bounded_join_set

在您想使用Tokio生成多个并发任务,但又想避免因太多同时任务而压垮系统的场景下,bounded_join_set 可以帮助您避免资源耗尽,同时仍能受益于并发。

如何使用

bounded_join_set 添加到您的 Cargo.toml 依赖项

[dependencies]
bounded_join_set = "0.1.0"

以下是一个基本使用示例

use bounded_join_set::JoinSet;

#[tokio::main]
async fn main() {
    let concurrency_limit = 5;
    let mut join_set = JoinSet::new(concurrency_limit);

    for _ in 0..10 {
        join_set.spawn(async {
            // Your concurrent task here.
        });
    }

    while join_set.join_next().await.is_some() {}
}

特性与优势

  • 简单的API:如果您熟悉Tokio的 JoinSet,那么您已经知道如何使用 bounded_join_set
  • 资源管理:通过控制并发轮询的任务数量来防止系统过载。
  • 灵活:根据您的系统能力和需求设置自己的并发限制。

限制

虽然 bounded_join_set 旨在提供比Tokio原生 JoinSet 更好的并发控制,但还有一些限制需要注意

  • 不支持 spawn_blocking:截至目前版本,该库不支持Tokio提供的 spawn_blocking 方法。如果您的应用程序依赖于CPU密集型操作,并从中受益于 spawn_blocking 功能,则需要从该库中单独管理。我们正在考虑在未来的版本中扩展对该功能的支持,但尚未确定具体时间表。

我们总是热衷于改进和扩展 bounded_join_set 的功能。如果您遇到任何问题或有任何建议,请随时在我们的GitHub仓库中打开一个问题。

贡献与支持

欢迎贡献、功能请求和反馈。请随意在 GitHub 仓库中打开一个问题或拉取请求。

许可证: MIT

依赖项

~2–3MB
~46K SLoC