blob: 7d61d0d659d8bc23b85a02d17a5d326cf2e9a906 [file] [log] [blame]
#![feature(test)]
extern crate mio;
extern crate test;
use mio::*;
use test::Bencher;
use std::sync::Arc;
use std::thread;
#[bench]
fn bench_poll(bench: &mut Bencher) {
const NUM: usize = 10_000;
const THREADS: usize = 4;
let poll = Poll::new().unwrap();
let mut events = Events::with_capacity(1024);
let mut registrations = vec![];
let mut set_readiness = vec![];
for i in 0..NUM {
let (r, s) = Registration::new(
&poll,
Token(i),
Ready::readable(),
PollOpt::edge());
registrations.push(r);
set_readiness.push(s);
}
let set_readiness = Arc::new(set_readiness);
bench.iter(move || {
for mut i in 0..THREADS {
let set_readiness = set_readiness.clone();
thread::spawn(move || {
while i < NUM {
set_readiness[i].set_readiness(Ready::readable()).unwrap();
i += THREADS;
}
});
}
let mut n = 0;
while n < NUM {
n += poll.poll(&mut events, None).unwrap();
}
})
}