#[macro_use]
extern crate criterion;
extern crate threads_pool;
use criterion::{black_box, Criterion};
use std::sync::atomic;
use threads_pool::prelude::*;
fn pool_base(size: usize, bound: usize) {
let mut pool = ThreadPool::new(size);
for num in 1..bound {
pool.exec(
move || {
for _ in 1..num % 4 {
atomic::spin_loop_hint();
}
},
false,
)
.unwrap_or_default();
}
pool.close();
}
fn pool_bench(c: &mut Criterion) {
c.bench_function("base pool measurement", |b| {
b.iter(|| pool_base(black_box(16), black_box(400)))
});
}
fn single_bench(c: &mut Criterion) {
shared_mode::initialize(black_box(16));
let bound = black_box(400);
c.bench_function("base single mode measurement", move |b| {
b.iter(|| {
for num in 1..bound {
shared_mode::run(move || {
for _ in 1..num % 16 {
atomic::spin_loop_hint();
}
});
}
})
});
shared_mode::close();
}
criterion_group!(benches, pool_bench, single_bench);
criterion_main!(benches);