use gil::mpsc::sharded::channel;
use std::{hint::black_box, num::NonZeroUsize, thread::spawn, time::SystemTime};
fn main() {
const SENDERS: usize = 8;
const CAPACITY_PER_SHARD: usize = 4096;
const MESSAGES: usize = 10_000_000;
let (mut tx, mut rx) = channel(
NonZeroUsize::new(SENDERS).unwrap(),
NonZeroUsize::new(CAPACITY_PER_SHARD).unwrap(),
);
let start = SystemTime::now();
for _ in 0..SENDERS - 1 {
let mut tx = tx.clone().expect("too many senders for max_shards");
spawn(move || {
for i in 0..MESSAGES {
tx.send(black_box(i));
}
});
}
spawn(move || {
for i in 0..MESSAGES {
tx.send(black_box(i));
}
});
for _ in 0..(SENDERS * MESSAGES) {
let x = rx.recv();
black_box(x);
}
let time = start.elapsed().unwrap();
println!("{time:?}");
}