12 个版本 (1 个稳定版)
使用旧的 Rust 2015
| 1.0.0 | 2016 年 7 月 27 日 |
|---|---|
| 0.1.10 | 2016 年 7 月 27 日 |
| 0.1.9 | 2016 年 3 月 31 日 |
| 0.1.8 | 2016 年 2 月 23 日 |
| 0.1.4 | 2016 年 1 月 27 日 |
#794 in 并发
1,030 每月下载量
在 15 个 Crates 中使用 (直接使用 13 个)
24KB
468 行
scoped-pool
提供范围和静态线程的灵活线程池。
文档
概述
简单使用示例(将转换应用于数组中的每个项)
extern crate scoped_pool;
use scoped_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::new、Pool::scoped)之外,此 crate 还提供了许多非常实用的便捷函数,用于使用范围线程的复杂代码。
还包括原始的 WaitGroup 类型,可以用于实现类似的“等待一组操作完成”逻辑,并在 Pool 和 Scope 中使用。
请参阅生成的文档(如上链接)以获取详细信息。
独特之处
与其他许多范围线程池 crate 不同,此 crate 被设计为最大灵活性:Pool 和 Scope 都是 Send + Sync,Pool 是 Clone,并且两者都有许多有用的便捷功能,例如
Pool::spawn 用于启动 'static 作业。
Pool::expand 用于扩展池中的线程数量。
Pool::shutdown 用于关闭池。
Scope::forever 和 Scope::zoom 用于外部化 Scope 管理,并允许对作业的调度和等待进行细粒度控制。
这两个类型上的几乎所有方法都只需要不可变借用,因此可以在没有外部同步的情况下安全地并发使用。
此外,该crate的内部设计经过精心构建,将所有不安全性封装在Scope类型中,这实际上仅为在Pool上安排的任务的WaitGroup类型添加了生命周期范围。
用法
使用crates.io仓库;将其添加到您的Cargo.toml文件中,与其他依赖项一起
[dependencies]
scoped-pool = "0.1"
作者
Jonathan Reem是scoped-pool的主要作者和维护者。
许可证
MIT
依赖项
~40KB