#thread-pool #scoped #scope #flexible #wait-group #static #updated

scoped-thread-pool

提供范围线程的灵活线程池。基于 https://github.com/reem/rust-scoped-pool 的更新分支

1 个稳定版本

1.0.4 2023年5月20日
1.0.3 2022年11月28日
1.0.2 2022年11月10日

#8 in #wait-group


用于 2 crate

MIT 许可证

26KB
515

scoped-thread-pool

提供范围和静态线程的灵活线程池。

文档

概述

简单使用示例(将转换应用到数组中的每个元素)

extern crate scoped_thread_pool;

use scoped_thread_pool::Pool;

let pool = Pool::new(4);

let mut buf = [0, 0, 0, 0];

pool.scoped(|scope| {
    for i in &mut buf {
        scope.execute(move || *i += 1);
    }
});

assert_eq!(&buf, &[1, 1, 1, 1]);

除了上述核心 API(《Pool::newPool::scoped)之外,此 crate 还提供许多非常实用的便捷函数,用于复杂代码中的范围线程。

还包括原始的 WaitGroup 类型,可用于实现类似的“等待一组动作完成”逻辑,并在 PoolScope 中使用。

请参阅生成的文档(如上链接)以获取详细信息。

独特之处

与许多其他范围线程池 crate 不同,此 crate 被设计为最大限度地灵活:`Pool` 和 `Scope` 都是 Send + Sync,`Pool` 是 Clone,并且两者都提供了许多有用的便捷功能,例如

Pool::spawn 用于创建 'static 任务。

Pool::expand 用于扩展线程池中的线程数量。

Pool::shutdown 用于关闭线程池。

Scope::foreverScope::zoom 用于外部化 `Scope` 管理并允许对任务调度和等待进行精细控制。

这两个类型上的几乎所有方法都只需要不可变借用,因此可以在不需要外部同步的情况下安全地并发使用。

此外,此 crate 的内部设计经过精心构建,以确保所有不安全性都封装在 Scope 类型中,这实际上只是为在 `Pool` 上安排的任务的 WaitGroup 类型添加了生存期范围。

使用方法

使用 crates.io 仓库;将其添加到您的 Cargo.toml 中,与其他依赖项一起

[dependencies]
scoped-thread-pool = "1.0.4"

作者

Jonathan Reem 是原始 scoped-pool 存储库的作者,该存储库是从这个存储库分叉而来的。

许可协议

MIT

依赖项

~145KB