use glommio::{enclose, prelude::*};
use std::{
sync::{Arc, Mutex},
time::{Duration, Instant},
};
fn main() {
let runs: u32 = 100;
let vec = Arc::new(Mutex::new(Vec::with_capacity(10)));
for _ in 0..runs {
let t = Instant::now();
let local_ex = LocalExecutorBuilder::new(Placement::Fixed(0))
.spawn(enclose! { (vec) move || async move {
let mut v = vec.lock().unwrap();
v.push(t.elapsed());
}})
.unwrap();
local_ex.join().unwrap();
}
let v = vec.lock().unwrap();
println!(
"cost to spawn an executor : {:#?}",
v.iter().fold(Duration::from_nanos(0), |acc, x| acc
.checked_add(*x)
.unwrap())
/ runs
);
let t = Instant::now();
for _ in 0..runs {
let local_ex = LocalExecutorBuilder::new(Placement::Fixed(0))
.spawn(move || async move {})
.unwrap();
local_ex.join().unwrap();
}
println!(
"cost to spawn and join an executor : {:#?}",
t.elapsed() / runs
);
let local_ex = LocalExecutorBuilder::new(Placement::Fixed(0))
.spawn(|| async move {
let runs: u32 = 10_000_000;
let t = Instant::now();
for _ in 0..runs {
crate::spawn_local(async {}).await;
}
println!("cost to run task no task queue: {:#?}", t.elapsed() / runs);
})
.unwrap();
local_ex.join().unwrap();
let local_ex = LocalExecutorBuilder::new(Placement::Fixed(0))
.spawn(|| async move {
let runs: u32 = 10_000_000;
let tq1 = crate::executor().create_task_queue(
Shares::Static(1000),
Latency::NotImportant,
"tq1",
);
let t = Instant::now();
for _ in 0..runs {
crate::spawn_local_into(async {}, tq1).unwrap().await;
}
println!("cost to run task in task queue: {:#?}", t.elapsed() / runs);
})
.unwrap();
local_ex.join().unwrap();
}