As the following benchmark runs, there's an increasing number of eventfds listed by lsof. With 2 new executors created in each round of test, there's 12 more open eventfds exists after the executors finish.
use glommio::channels::shared_channel;
use glommio::prelude::*;
use std::sync::mpsc::sync_channel;
use std::time::{Duration, Instant};
fn test_spsc(capacity: usize) {
let runs: u32 = 10_000_000;
let (sender, receiver) = shared_channel::new_bounded(capacity);
let sender = LocalExecutorBuilder::new()
.pin_to_cpu(0)
.spawn(move || async move {
let sender = sender.connect().await;
for _ in 0..runs {
sender.send(1).await.unwrap();
}
drop(sender);
})
.unwrap();
let receiver = LocalExecutorBuilder::new()
.pin_to_cpu(1)
.spawn(move || async move {
let receiver = receiver.connect().await;
for _ in 0..runs {
receiver.recv().await.unwrap();
}
})
.unwrap();
sender.join().unwrap();
receiver.join().unwrap();
}
fn main() {
for i in 0..10000 {
println!("==========");
println!("Round {}", i);
//test_spsc(10);
test_spsc(100);
test_spsc(1000);
test_spsc(10000);
}
}
As the following benchmark runs, there's an increasing number of eventfds listed by
lsof. With 2 new executors created in each round of test, there's 12 more open eventfds exists after the executors finish.