7 个版本
使用旧的 Rust 2015
0.1.6 | 2020 年 7 月 15 日 |
---|---|
0.1.5 | 2019 年 8 月 24 日 |
0.1.4 | 2019 年 1 月 9 日 |
0.1.3 | 2018 年 12 月 25 日 |
#567 在 并发
42 每月下载量
用于 treesum
11KB
93 行
parallel-iterator
并行化任何迭代器!
特性
- 支持生产迭代器和转换闭包的 !Send 和 !Sync。这允许使用捕获的闭包环境实现可变、安全和易于线程局部数据。
- 传播子线程的恐慌。
- 内部线程处理,无需担心!(待定:使其可配置)
一个最小示例
此代码是从 examples/example_1.rs
粘贴过来的。
extern crate parallel_iterator;
use parallel_iterator::ParallelIterator;
fn do_some_work(i: u32) -> u32 {
i + 1 // let's pretend this is a heavy calculation
}
fn main() {
for i in ParallelIterator::new(|| (0u32..100), || do_some_work) {
println!("Got a result: {}!", i);
}
}
一个稍微更现实的示例
此代码是从 examples/example_2.rs
粘贴过来的。
extern crate parallel_iterator;
use parallel_iterator::ParallelIterator;
fn do_some_work(i: usize, out: &mut Vec<usize>) {
for j in 0..i {
out.push(j); // The caller can pre-allocate.
}
}
fn main() {
const MAX: usize = 1000;
let xform_ctor = || {
let mut buffer = Vec::with_capacity(MAX);
move |i| {
buffer.clear(); // Clear but keep the internal allocation.
do_some_work(i, &mut buffer);
buffer.last().map(|u| *u) // This is just an example value.
}
};
for i in ParallelIterator::new(|| (0..MAX), xform_ctor) {
match i {
Some(i) => println!("Got Some({})!", i),
None => println!("Got None!"),
}
}
}
请参阅 ParallelIterator 结构体的文档以获取更多详细信息。
变更日志
0.1.6
- 更新了依赖项。
0.1.5
- 更新了依赖项。
0.1.4
- 添加了示例。
- 改进了文档。
- 更新了依赖项。
0.1.3
- 从 chan 切换到 crossbeam-channel。
- 更新了依赖项。
0.1.2
- 更新了依赖项。
0.1.1
- 在最小示例中删除了死代码。
0.1.0
- 首次发布。
许可协议
根据您选择以下任一许可协议:
- Apache 许可协议第 2 版,LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖项
~495KB