thread-manager 1.0.0

A streamlined Rust library for efficient thread pooling and parallel job execution, designed for simplicity, flexibility, and performance.
Documentation
use std::hint::black_box;
use std::thread::sleep;
use std::time::Duration;
use std::time::Instant;

use thread_manager::ThreadManager;
use thread_manager::ThreadManagerCore;

const ITERATIONS: usize = 10_000_000;
const THREADS: usize = 16;
const WPC: usize = 4;

#[test]
fn small_bench() {
    sleep(Duration::from_millis(500));

    tm_bench();
    tm_asymmetric_bench();
    tm_stack_bench();
    tm_stack_asymmetric_bench();

    st_bench();
}

fn st_bench() {
    println!("[SINGLE THREAD BENCH]");
    let now: Instant = Instant::now();
    for idx in 0..ITERATIONS {
        black_box(small(idx));
    }

    let elapsed: Duration = now.elapsed();
    println!(
        "Time {}ms | Time {}us",
        elapsed.as_millis(),
        elapsed.as_micros()
    );
}

fn tm_bench() {
    println!("[THREAD MANAGER BENCH]");
    let thread_manager: ThreadManager<()> = ThreadManager::<()>::new(THREADS);
    let now: Instant = Instant::now();
    for idx in 0..ITERATIONS {
        thread_manager.execute(move || black_box(small(idx)));
    }

    let elapsed: Duration = now.elapsed();
    println!(
        "Time {}ms | Time {}us",
        elapsed.as_millis(),
        elapsed.as_micros()
    );
}

fn tm_asymmetric_bench() {
    println!("[THREAD MANAGER ASYMMETRIC BENCH]");
    let thread_manager: ThreadManager<()> = ThreadManager::<()>::new_asymmetric(THREADS, WPC);
    let now: Instant = Instant::now();
    for idx in 0..ITERATIONS {
        thread_manager.execute(move || black_box(small(idx)));
    }

    let elapsed: Duration = now.elapsed();
    println!(
        "Time {}ms | Time {}us",
        elapsed.as_millis(),
        elapsed.as_micros()
    );
}

fn tm_stack_bench() {
    println!("[THREAD MANAGER STACK BENCH]");
    let thread_manager: ThreadManagerCore<_, ()> = ThreadManagerCore::<_, ()>::new(THREADS);
    let now: Instant = Instant::now();
    for idx in 0..ITERATIONS {
        thread_manager.execute(move || black_box(small(idx)));
    }

    let elapsed: Duration = now.elapsed();
    println!(
        "Time {}ms | Time {}us",
        elapsed.as_millis(),
        elapsed.as_micros()
    );
}

fn tm_stack_asymmetric_bench() {
    println!("[THREAD MANAGER STACK ASYMMETRIC BENCH]");
    let thread_manager: ThreadManagerCore<_, ()> =
        ThreadManagerCore::<_, ()>::new_asymmetric(THREADS, WPC);
    let now: Instant = Instant::now();
    for idx in 0..ITERATIONS {
        thread_manager.execute(move || black_box(small(idx)));
    }

    let elapsed: Duration = now.elapsed();
    println!(
        "Time {}ms | Time {}us",
        elapsed.as_millis(),
        elapsed.as_micros()
    );
}

fn small(idx: usize) {
    let mut result: f32 = 0.0;
    for _ in 0..1 {
        let idx: f32 = idx as f32;
        let pow: f32 = idx.powf(16.0f32).sqrt();
        result += pow;
    }
    black_box(result);
}