- 动态线程管理 - 根据任务数量动态调整线程数
- 智能回收机制 - 支持空闲线程超时回收(默认10s)
- 零外部依赖 - 完全基于 Rust 标准库实现
- 高并发安全 - 解决了竞态条件和资源泄漏问题
- 性能优化 - 原子操作优化,减少锁竞争
- 详细中文注释 - 逐行注释,轻松上手学习
- 任务队列: 使用
VecDeque实现的高性能双端队列 - 线程管理: 动态创建和回收工作线程
- 同步机制:
Arc、Mutex、Condvar和原子操作 - 资源清理: 自动清理退出线程的句柄,防止内存泄漏
- 原子化的线程创建操作,避免竞态条件
- 线程安全的任务分发和状态管理
- 优雅的线程池关闭和资源清理
- 低延迟: 优化的锁策略减少线程阻塞
- 高吞吐: 原子操作减少锁竞争
- 内存高效: 及时清理退出线程,避免资源泄漏
- 适合短期使用: 10秒超时机制适合批量任务处理
use std::sync::Arc;
use std::thread;
use std::time::Duration;
use thread_pool::ThreadPool;
fn main() {
// 创建线程池,默认最大线程数为硬件支持的最大线程数
let pool = Arc::new(ThreadPool::new());
// 监控线程数20秒
let pool_clone = Arc::clone(&pool);
pool.submit(move || monitor(pool_clone, 20));
// 提交100个任务
let total_tasks = 100;
for task_id in 0..total_tasks {
thread::sleep(Duration::from_millis(200));
let pool_clone = Arc::clone(&pool);
pool_clone.submit(move || task(task_id));
}
// 等待所有任务完成
pool.wait_for_completion();
}
fn task(task_id: usize) {
println!("执行任务 {}", task_id);
thread::sleep(Duration::from_secs(2));
println!("任务 {} 完成", task_id);
}
fn monitor(pool: Arc<ThreadPool>, seconds: usize) {
for i in 0..seconds * 10 {
println!("当前线程数: {}", pool.threads_num());
wqfthread::sleep(Duration::from_millis(100));
}
}无外部依赖! 完全基于 Rust 标准库实现。
[package]
name = "rust-dynamic-thread-pool"
version = "0.2.0"
edition = "2021"
[dependencies]
# 无需外部依赖
本项目设计思路源于:senlinzhan/dpool
基础知识学习书籍《Rust 圣经》:sunface/rust-course