1 个不稳定版本

0.1.0 2022年8月1日

#1643算法

MIT 许可证

8KB
86

sharded-counter

[ docs.rs | crates.io ]

这是一个并发计数器,适用于多个线程需要快速分配唯一 ID 的场景。它通过一个全局的 CounterPool 来工作,该池在所有线程之间共享。每个线程从池中创建一个 LocalCounter,它分配一部分唯一数字。这些数字可以被迭代,每次用完时,计数器从全局池中分配更多的新数字。

示例

use sharded_counter::CounterPool;
use std::{sync::Arc, thread};

let num_threads = thread::available_parallelism().unwrap().get();
let pool = Arc::new(CounterPool::new());

let handles: Vec<_> = (0..num_threads)
    .map(|_| {
        let pool = pool.clone();

        thread::spawn(move || {
            let _counts: Vec<_> = pool.counter().take(1_000_000).collect();
        })
    })
    .collect();

for handle in handles {
    handle.join().unwrap();
}

许可证

MIT 许可证。

依赖项

~48KB