4 个版本
0.3.2 | 2024 年 5 月 9 日 |
---|---|
0.3.1 | 2024 年 5 月 9 日 |
0.3.0 | 2024 年 4 月 19 日 |
0.2.0 |
|
0.1.0 | 2024 年 4 月 19 日 |
#223 in 并发
每月 184 次下载
49KB
711 行
简单线程池
一个简单的、对panic有容忍度的线程池,可以高效地工作并等待多个任务。
为什么制作这个库
这个线程池没有什么特别之处,我承认我没有真正研究其他可用的选项,因此这几乎肯定比下面列出的替代方案更差。我想做些有趣的事情,几个月前我需要线程池,所以我做了一个。除此之外,我对很多依赖有个人反对,所以这个线程池除了标准库外没有任何依赖。
有趣的功能
- 除了标准库外没有依赖
- 完全对panic有容忍度(就我测试的范围而言)。无论任务做什么,线程池都不会崩溃
- 高效的同步原语函数,等待所有任务完成
- 能够在同一组线程上执行多个'状态'任务的能力,即您可以有一个状态发送会panic的任务,这些任务不会影响其他状态
希望有
- 我希望使线程池更可定制,带有自定义线程名称/堆栈大小
- 我希望实现一种无效化/清除任务的方法,这样它们就不会占用CPU时间运行
- 如果有时间,我很乐意研究动态地给线程分配堆栈大小,有点像 go 线程
- 如果我真的疯了,我希望研究更有效地调度任务,也许基于某些优先级或给线程池的不同实例分配相等的CPU时间,而不是一个接一个地执行任务,从而使共享一个池更易用和更美观。
用法
将以下内容添加到 Cargo.toml
以使用该crate
[dependencies]
easy-threadpool = "0.3.1"
之后,像这样使用库
use std::error::Error;
use easy_threadpool::ThreadPoolBuilder;
fn main() -> Result<(), Box<dyn Error>> {
fn job() {
println!("Hello world!");
}
let builder = ThreadPoolBuilder::with_max_threads()?;
let pool = builder.build()?;
for _ in 0..10 {
pool.send_job(job);
}
assert!(pool.wait_until_finished().is_ok());
Ok(())
}
有关更多示例,请参阅源代码中的文档 这里。
MSRV
此crate目前与rust 1.72.0或更高版本兼容。但这没有保证,因为开发仍在继续。
类似库
许可证
根据MIT许可证授权 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)。