26 个版本
使用旧的 Rust 2015
0.3.8 | 2018年4月19日 |
---|---|
0.3.7 | 2018年4月18日 |
0.3.3 | 2017年12月2日 |
0.3.2 | 2017年11月6日 |
0.1.10 | 2017年9月28日 |
#789 in 并发
在 2 个 crate 中使用(通过 tange)
26KB
522 行
JobPool
为 Rust 实现的一个简单且轻量级的线程池实现。
示例
extern crate jobpool;
use jobpool::JobPool;
use std::thread;
use std::time::Duration;
use std::sync::mpsc;
fn main() {
let pool_size = 8; // or number of cpu cores
let mut pool = JobPool::new(pool_size);
// pool.auto_grow(100);
let (tx, rx) = mpsc::channel();
for i in 0..100 {
let tx = tx.clone();
pool.queue(move || {
// Do some work, following is just for example's sake
thread::sleep(Duration::from_millis(100));
println!("sending: {}", i);
tx.send(i).unwrap();
});
// or pool.queue_with_priority(move || {...}, priority_val);
}
for _ in 0..100 {
match rx.recv() {
Ok(val) => println!("received: {}", val),
Err(e) => eprintln!("Error: {}", e),
}
}
// Explicit call to shutdown; JobPool shuts down automatically after
// going out of scope as well.
pool.shutdown();
}