#thread-pool #worker #jobs #sync #idle #synchronized #submission

nightly sync-threadpool

一个同步线程池,仅在有空闲工作线程时才允许提交新任务

2 个版本

使用旧的 Rust 2015

0.0.2 2018年7月9日
0.0.1 2018年7月9日

#6 in #submission

AGPL-3.0

15KB
122 代码行,不包括注释

一个同步线程池。此线程池允许只有在当前有空闲工作线程时才提交新任务。这在搜索类任务中非常有用:想象你需要以多线程方式查找某个值。一旦找到值,当然不希望提交更多搜索任务,而可能希望将工作线程用于其他事情。

示例

此示例演示了通过暴力搜索来找到平方根。通过向线程池发送搜索范围来找到根。

use sync_threadpool::ThreadPool;
use std::sync::mpsc::channel;

let n_workers = 4;

const TARGET_SQUARE: u64 = 1 << 50;

let mut pool = ThreadPool::new(n_workers);

// channel to send back results
let (tx, rx) = channel();

for start in 0..0xffff_ffff_ffff {
    if let Ok(result) = rx.try_recv() {
        println!("Result found: {0:x}*{0:x} = {1:x}", result, TARGET_SQUARE);
        break;
    }
    let start = start << 16;
    let end = start + 0xffff;
    let range = start..end;
    let tx = tx.clone();
    let job = move || {
        for i in range {
            if i*i == TARGET_SQUARE {
                tx.send(i).unwrap();
            }
        }
    };

    pool.execute(job);
}

无运行时依赖