8个版本
0.2.4 | 2022年4月1日 |
---|---|
0.2.3 | 2022年3月24日 |
0.2.2 |
|
0.1.4 | 2022年2月22日 |
0.1.2 | 2020年12月23日 |
#1298 in 异步
168 每月下载次数
在 14 个crate(2个直接) 中使用
29KB
385 代码行
safina-threadpool
线程池。
您可以单独使用它,也可以与 safina
,一个安全的异步运行时一起使用。
特性
- 将闭包或
FnOnce
添加到池中,其中一个线程将执行它 - 自动重启崩溃的线程
- 在无法创建线程后重试
- 销毁
ThreadPool
结构以停止所有空闲线程。 - 销毁池并等待所有线程停止
禁止(不安全代码)
- 仅依赖于
std
- 100% 测试覆盖率
限制
- 未优化
示例
let pool =
safina_threadpool::ThreadPool::new("worker", 2).unwrap();
let receiver = {
let (sender, receiver) =
std::sync::mpsc::channel();
for data in data_source {
let sender_clone = sender.clone();
pool.schedule(
move || process_data(data, sender_clone));
}
receiver
};
let results: Vec<ProcessResult> =
receiver.iter().collect();
// ...
替代方案
阻塞
- 流行
- 少量
不安全
代码 - blocking/issues/24: 从线程创建失败中恢复
threadpool
- 流行
- 维护良好
- 依赖项包含
不安全
代码 - rust-threadpool/issues/97: 功能:提供一种关闭线程池的方式
- 在无法创建线程时崩溃。
scoped_threadpool
- 流行
- 包含
不安全
代码 - 未维护
- 在panic时不会重启工作线程。
scheduled-thread-pool
- 被一个流行的连接池库使用
- 依赖项包含
不安全
代码 - 安排立即运行、定期运行或延迟后运行的作业。
workerpool
- 依赖项包含
不安全
代码
- 依赖项包含
threads_pool
- 充满
不安全
- 充满
thread-pool
- 过时
- 依赖项包含
不安全
代码
tasque
- 依赖项包含
不安全
代码
- 依赖项包含
fast-threadpool
- 依赖项包含
不安全
代码
- 依赖项包含
blocking-permit
- 充满
不安全
- 充满
rayon-core
- 充满
不安全
- 充满
变更日志
变更日志
- v0.2.4 - 更新文档。
- v0.2.3 - 实现
From<NewThreadPoolError>
和From<TryScheduleError>
以支持std::io::Error
。 - 版本 v0.2.2 - 添加
ThreadPool::join
和ThreadPool::try_join
。 - 版本 v0.2.1 - 提高测试覆盖率。
- 版本 v0.2.0
ThreadPool::new
返回Result
。ThreadPool::try_schedule
在无法重启崩溃的线程时返回错误。ThreadPool::schedule
处理启动替换线程失败的情况。
- 版本 v0.1.4 - 在丢弃时停止线程。
- 版本 v0.1.3 - 支持稳定的 Rust!需要 1.51+。
- 版本 v0.1.2 - 添加另一个示例。
- 版本 v0.1.1 - 简化内部结构并改进文档。
- 版本 v0.1.0 - 首次发布。
待办事项
- 使
join
和try_join
与Arc<ThreadPool>
一起工作。 - 当所有线程崩溃时记录一条警告。
- 更新测试覆盖率。
- 添加一个公开的
respawn_threads
函数。 - 添加压力测试。
- 添加基准测试。请参阅https://crates.io/crates/executors中的基准测试。
- 添加一种方式,允许工作在同一个线程上调度另一个工作,并进行线程窃取。
许可证:Apache-2.0