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