#thread-pool #thread

shrink_pool

一个线程池,当线程空闲时会立即终止

3 个版本 (1 个稳定版)

1.0.0 2023年9月19日
0.9.1 2023年9月18日
0.9.0 2023年9月18日

#473 in 并发


用于 munyo

MIT/Apache

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,

动机

我不喜欢那些无声地创建全局线程并使其等待的库。我想在它们不运行时清理它们。

许可证

以下任一许可证下授权

没有运行时依赖