#迭代器 #并行 #线程

parallel-iterator

轻松并行化任何迭代器!

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

Apache-2.0/MIT

11KB
93

parallel-iterator

unsafe forbidden

并行化任何迭代器!

特性

  • 支持生产迭代器和转换闭包的 !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

  • 首次发布。

许可协议

根据您选择以下任一许可协议:

任选其一。

依赖项

~495KB