Crates.io | sharded-counter |
lib.rs | sharded-counter |
version | 0.1.0 |
source | src |
created_at | 2022-08-01 04:58:01.260154 |
updated_at | 2022-08-01 04:58:01.260154 |
description | A fast and concurrent counter. |
homepage | https://github.com/jerry73204/sharded-counter |
repository | https://github.com/jerry73204/sharded-counter.git |
max_upload_size | |
id | 636530 |
size | 16,278 |
It is a concurrent counter recommended for the scenario where multiple
threads need to allocate unique IDs fast. It works by a global
CounterPool
which is shared among the threads. Each thread creates a
LocalCounter
from the pool, which allocates a portion of unique
numbers. The numbers can be iterated, and each time they are depleted,
the conuter allocates more new numbers from the global pool.
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 license.