1 个稳定版本
1.0.4 | 2023年5月20日 |
---|---|
1.0.3 |
|
1.0.2 |
|
#8 in #wait-group
用于 2 crate
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::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-thread-pool = "1.0.4"
作者
Jonathan Reem 是原始 scoped-pool 存储库的作者,该存储库是从这个存储库分叉而来的。
许可协议
MIT
依赖项
~145KB