node-workers 0.8.0

A pool of long-lived nodejs workers
Documentation
use std::process::Command;

use criterion::{black_box, criterion_group, criterion_main, Criterion, SamplingMode, Throughput};
use node_workers::WorkerPool;

fn bench_fast_binary(c: &mut Criterion) {
  let mut group = c.benchmark_group("fast node binary");
  group.sample_size(30);
  group.throughput(Throughput::Elements(1 as u64));
  group.sampling_mode(SamplingMode::Flat);

  group.bench_function("standard commands", |b| {
    b.iter(|| {
      Command::new("node")
        .arg("benches/workers/fast-inner")
        .arg("30")
        .spawn()
        .unwrap()
        .wait()
        .unwrap();
    })
  });
  let mut pool = WorkerPool::setup("benches/workers/fast", 1);
  group.bench_function("worker pool", |b| {
    b.iter(|| {
      pool.perform::<(), _>("fib", black_box(vec![30])).unwrap();
    })
  });

  group.finish();
}

fn bench_slow_binary(c: &mut Criterion) {
  let mut group = c.benchmark_group("slow node binary");
  group.sample_size(10);
  group.throughput(Throughput::Elements(1 as u64));
  group.sampling_mode(SamplingMode::Flat);

  group.bench_function("standard commands", |b| {
    b.iter(|| {
      Command::new("node")
        .arg("benches/workers/slow-inner")
        .arg("30")
        .spawn()
        .unwrap()
        .wait()
        .unwrap();
    })
  });
  let mut pool = WorkerPool::setup("benches/workers/slow", 1);
  group.bench_function("worker pool", |b| {
    b.iter(|| {
      pool.perform::<(), _>("fib", black_box(vec![30])).unwrap();
    })
  });

  group.finish();
}

criterion_group!(benches, bench_fast_binary, bench_slow_binary);
criterion_main!(benches);