mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-01-25 22:00:14 +00:00
44 lines
1000 B
Rust
44 lines
1000 B
Rust
#![feature(test)]
|
|
|
|
extern crate test;
|
|
use crate::test::Bencher;
|
|
|
|
use futures::channel::oneshot;
|
|
use futures::executor::block_on;
|
|
use futures::future;
|
|
use futures::stream::{FuturesUnordered, StreamExt};
|
|
use futures::task::Poll;
|
|
use std::collections::VecDeque;
|
|
use std::thread;
|
|
|
|
#[bench]
|
|
fn oneshots(b: &mut Bencher) {
|
|
const NUM: usize = 10_000;
|
|
|
|
b.iter(|| {
|
|
let mut txs = VecDeque::with_capacity(NUM);
|
|
let mut rxs = FuturesUnordered::new();
|
|
|
|
for _ in 0..NUM {
|
|
let (tx, rx) = oneshot::channel();
|
|
txs.push_back(tx);
|
|
rxs.push(rx);
|
|
}
|
|
|
|
thread::spawn(move || {
|
|
while let Some(tx) = txs.pop_front() {
|
|
let _ = tx.send("hello");
|
|
}
|
|
});
|
|
|
|
block_on(future::poll_fn(move |cx| {
|
|
loop {
|
|
if let Poll::Ready(None) = rxs.poll_next_unpin(cx) {
|
|
break;
|
|
}
|
|
}
|
|
Poll::Ready(())
|
|
}))
|
|
});
|
|
}
|