| #![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(); |
| } |
| }) |
| } |