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 并发

Download history 301/week @ 2024-02-26 228/week @ 2024-03-04 395/week @ 2024-03-11 347/week @ 2024-03-18 375/week @ 2024-03-25 308/week @ 2024-04-01 247/week @ 2024-04-08 359/week @ 2024-04-15 362/week @ 2024-04-22 250/week @ 2024-04-29 193/week @ 2024-05-06 304/week @ 2024-05-13 177/week @ 2024-05-20 297/week @ 2024-05-27 242/week @ 2024-06-03 297/week @ 2024-06-10

1,030 每月下载量
15 个 Crates 中使用 (直接使用 13 个)

MIT 许可证

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::newPool::scoped)之外,此 crate 还提供了许多非常实用的便捷函数,用于使用范围线程的复杂代码。

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

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

独特之处

与其他许多范围线程池 crate 不同,此 crate 被设计为最大灵活性:PoolScope 都是 Send + SyncPoolClone,并且两者都有许多有用的便捷功能,例如

Pool::spawn 用于启动 'static 作业。

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

Pool::shutdown 用于关闭池。

Scope::foreverScope::zoom 用于外部化 Scope 管理,并允许对作业的调度和等待进行细粒度控制。

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

此外,该crate的内部设计经过精心构建,将所有不安全性封装在Scope类型中,这实际上仅为在Pool上安排的任务的WaitGroup类型添加了生命周期范围。

用法

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

[dependencies]
scoped-pool = "0.1"

作者

Jonathan Reem是scoped-pool的主要作者和维护者。

许可证

MIT

依赖项

~40KB