4 个版本
0.1.3 | 2021 年 7 月 14 日 |
---|---|
0.1.2 | 2021 年 7 月 9 日 |
0.1.1 | 2021 年 7 月 9 日 |
0.1.0 | 2021 年 7 月 8 日 |
808 在 并发
38KB
223 行
Lagoon
Lagoon 是一个线程池库,旨在解决现有线程池库中的许多问题。
示例
Lagoon 的作用域作业可用于简单的类似 rayon 的数据并行。
// A vector of the numbers 0 to 99
let mut data = (0..100).collect::<Vec<u32>>();
lagoon::ThreadPool::default().scoped(|s| {
// For each element in the vector...
for x in data.iter_mut() {
// ...spawn a job that squares that element
s.run(move || *x *= *x);
}
});
// Demonstrate that the elements have indeed been squared
assert!((0..100)
.map(|x| x * x)
.zip(data.into_iter())
.all(|(x, y)| x == y));
功能
- 作用域作业:安全地启动具有对其父作用域访问权限的作业!
- 作业句柄:在作业完成时接收作业的结果,或等待其完成!
- 全局池:按使用付费的全局线程池,避免依赖项争夺资源!
- 自定义线程属性:指定线程名称、堆栈大小等。
计划中的功能
- 异步作业等待支持:在异步上下文中使用线程池!
性能
Lagoon 具有非常具有竞争力的性能。以下是在 AMD Ryzen 7 3700x(16 个线程)上运行的每个线程池库启动新池、执行 100,000 个简单作业以及完成执行(即:越小越好)所需的时间,与常用替代库相比。
Spawning 100000 trivial tasks/lagoon time: [15.124 ms 16.437 ms 17.871 ms]
Spawning 100000 trivial tasks/threadpool time: [59.108 ms 59.549 ms 59.989 ms]
Spawning 100000 trivial tasks/uvth time: [11.494 ms 12.598 ms 13.750 ms]
Spawning 100000 trivial tasks/rusty_pool time: [40.203 ms 44.778 ms 49.612 ms]
基准测试在 AMD Ryzen 7 3700x(16 个线程)上运行。
许可证
Lagoon 在主仓库中根据 MIT 许可证(见 LICENSE
)授权。
依赖项
~590KB