#任务队列 #线程池 #多线程 #抽象 #可组合 #灵活 #提供

task_pool

基于任务的可组合多线程的灵活抽象

5 个版本

0.1.4 2023 年 12 月 24 日
0.1.3 2023 年 11 月 13 日
0.1.2 2023 年 11 月 6 日
0.1.1 2023 年 8 月 1 日
0.1.0 2023 年 7 月 28 日

#342并发

32 每月下载
用于 datafrost

MIT/Apache

42KB
816 代码行

task_pool

Crates.io Docs.rs

task_pool 提供了一个在固定硬件线程池中组合和分配工作的灵活抽象。为此,它提供了以下功能

  • 定义和组合工作源的能力
  • 创建硬件线程池并消费这些源的能力
  • 各种高级调度抽象,如可等待的任务

使用

要使用 task_pool,有三个步骤

  1. 创建和初始化 WorkProvider 实例(例如队列或多个队列的链式结构)
  2. 创建一个硬件 TaskPool,它消费这些实例
  3. WorkProvider 上启动高级任务,这些任务由线程池处理

以下示例展示了这些步骤的实际操作

// 1. Create a queue from which we can spawn tasks
let queue = TaskQueue::<Fifo>::default();

// 2. Create a threadpool that draws from the provided queue. Forget the threadpool so that it runs indefinitely.
TaskPool::new(queue.clone(), 4).forget();

// 3. Spawn a task into the queue and synchronously await its completion.
assert_eq!(queue.spawn(once(|| { println!("This will execute on background thread."); 2 })).join(), 2);

// ...or, asynchronously await its completion.
assert_eq!(queue.spawn(once(|| { println!("This will execute on background thread."); 2 })).await, 2);

依赖项

~1.4–2.8MB
~49K SLoC