2 个不稳定版本
使用旧的 Rust 2015
0.4.0 | 2018年3月3日 |
---|---|
0.1.0 | 2017年6月12日 |
#560 in 并发
41 次每月下载
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