| Crates.io | sharded-counter |
| lib.rs | sharded-counter |
| version | 0.1.0 |
| created_at | 2022-08-01 04:58:01.260154+00 |
| updated_at | 2022-08-01 04:58:01.260154+00 |
| 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.