3 个版本 (1 个稳定版)
1.0.0 | 2023年9月19日 |
---|---|
0.9.1 | 2023年9月18日 |
0.9.0 | 2023年9月18日 |
#473 in 并发
用于 munyo
13KB
176 行
ShrinkPool
一个线程池,当线程空闲时会立即终止。
如果有队列中的任务,会创建 OS 线程直到池子满。
当所有任务完成时,池子中没有运行的线程。
任务以 FIFO(先进先出)的方式启动。不发生工作窃取。
但是,任务完成的顺序取决于操作系统。
use shrink_pool::ShrinkPool;
use num_cpus;
let pool = ShrinkPool::new(num_cpus::get());
for i in 0..10 {
pool.execute(move || println!("task {i} is processing..."))
}
Result:
Task 0 is processing...
Task 2 is processing...
Task 5 is processing...
Task 6 is processing...
Task 7 is processing...
Task 8 is processing...
Task 9 is processing...
Task 3 is processing...
Task 4 is processing...
Task 1 is processing...
如果您想同步任务,可以使用 SyncThread。
它基本上是一个只有一个线程的线程池,当线程不运行时线程会被终止。
use shrink_pool::SyncThread;
let thread = SyncThread::new();
for i in 0..10 {
thread.execute(move || print!("{i},"))
}
Result:
0,1,2,3,4,5,6,7,8,9,
动机
我不喜欢那些无声地创建全局线程并使其等待的库。我想在它们不运行时清理它们。
许可证
以下任一许可证下授权
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 http://opensource.org/licenses/MIT)