glommio 0.9.0

Glommio is a thread-per-core crate that makes writing highly parallel asynchronous applications in a thread-per-core architecture easier for rustaceans.
Documentation
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();
}