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
42KB
816 代码行
task_pool
task_pool
提供了一个在固定硬件线程池中组合和分配工作的灵活抽象。为此,它提供了以下功能
- 定义和组合工作源的能力
- 创建硬件线程池并消费这些源的能力
- 各种高级调度抽象,如可等待的任务
使用
要使用 task_pool
,有三个步骤
- 创建和初始化
WorkProvider
实例(例如队列或多个队列的链式结构) - 创建一个硬件
TaskPool
,它消费这些实例 - 在
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