fn main() { let thread_num = 32; let msg_num = 16; let (mut main_tx, main_rx) = flume::bounded::<()>(1); for _ in 0..thread_num { let (mut tx, rx) = flume::bounded(1); std::mem::swap(&mut tx, &mut main_tx); std::thread::spawn(move || { for msg in rx.iter() { tx.send(msg).unwrap(); } }); } for _ in 0..1000 { let main_tx = main_tx.clone(); std::thread::spawn(move || { for _ in 0..msg_num { main_tx.send(Default::default()).unwrap(); } }); for _ in 0..msg_num { main_rx.recv().unwrap(); } } }