summaryrefslogtreecommitdiffstats
path: root/third_party/rust/futures-util/benches/futures_unordered.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/futures-util/benches/futures_unordered.rs')
-rw-r--r--third_party/rust/futures-util/benches/futures_unordered.rs43
1 files changed, 43 insertions, 0 deletions
diff --git a/third_party/rust/futures-util/benches/futures_unordered.rs b/third_party/rust/futures-util/benches/futures_unordered.rs
new file mode 100644
index 0000000000..d5fe7a59de
--- /dev/null
+++ b/third_party/rust/futures-util/benches/futures_unordered.rs
@@ -0,0 +1,43 @@
+#![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(())
+ }))
+ });
+}