#调度 #依赖图 #拓扑排序

partopo

执行由依赖图描述的工作的函数

1 个不稳定版本

0.1.0 2022年7月21日

#1507算法

Apache-2.0

11KB
88

partopo

使用单个线程的工人或使用线程池并行执行由依赖图描述的工作。

这是对 Kahn 算法进行最小化修改以并行运行的对拓扑排序的实现。

使用方法

use partopo::{Dag, Node};
use std::time::Instant;
use std::{thread, time::Duration};

// Construct a DAG:
// 1 -> 2
// 1 -> 3
// 4 -> 5
// 2 -> 5

let mut dag: Dag<usize> = Dag::new();
let idx1 = dag.add_node(Node::new(1));
let (_, idx2) = dag.add_child(idx1, (), Node::new(2));
let (_, _idx3) = dag.add_child(idx1, (), Node::new(3));
let idx4 = dag.add_node(Node::new(4));
let (_, idx5) = dag.add_child(idx4, (), Node::new(5));
dag.add_edge(idx2, idx5, ()).unwrap();

// Example work function
fn do_work(data: usize) {
    thread::sleep(Duration::from_millis(1000));
    println!("{}", data);
}

// Execute work on a threadpool
partopo::par_execute(dag, do_work);

免责声明

这不是官方支持的产品

依赖项

~3.5MB
~60K SLoC