2 个不稳定版本

使用旧的 Rust 2015

0.4.0 2018年3月3日
0.1.0 2017年6月12日

#560 in 并发

41 次每月下载

BSD-2-Clause

41KB
771

构建多线程执行管道的工具

Pipeline 由一个或多个阶段组成,每个阶段都在其自己的线程(或多个线程)中运行。它们从前一阶段接收项目,并为下一阶段生成项目,类似于 Unix 管道。这允许将计算表达为一系列相互连接并并行运行的步骤。

示例

构建前10个斐波那契数

use pipelines::Pipeline;

fn fibonacci(n:u64)->u64{if n<2 {1} else {fibonacci(n-1) + fibonacci(n-2)}}

let nums: Vec<u64> = (0..10).collect();
let fibs: Vec<u64> = Pipeline::from(nums)
    .map(fibonacci)
    .into_iter().collect();

并行构建前10个斐波那契数,然后加倍

use pipelines::Pipeline;

let workers = 2;
fn fibonacci(n:u64)->u64{if n<2 {1} else {fibonacci(n-1) + fibonacci(n-2)}}

let nums: Vec<u64> = (0..10).collect();
let fibs: Vec<u64> = Pipeline::from(nums)
    .pmap(workers, fibonacci)
    .map(|x| x*2)
    .into_iter().collect();

并行构建前10个斐波那契数,然后通过 map-reduce 阶段按奇偶性分组

use pipelines::Pipeline;

let workers = 2;
fn fibonacci(n:u64)->u64{if n<2 {1} else {fibonacci(n-1) + fibonacci(n-2)}}

let nums: Vec<u64> = (0..10).collect();
let fibs: Vec<(bool, u64)> = Pipeline::from(nums)
    .pmap(workers, fibonacci)
    .map(|num| (num % 2 == 0, num))
    .preduce(workers, |evenness, nums| (evenness, *nums.iter().max().unwrap()))
    .into_iter().collect();

依赖关系

~400–630KB