Offload functions to worker threads with shared memory primitives for Node.js.
1// Process a batch of work items in parallel using a worker pool.
2// Compares sequential (dedicated worker) vs parallel (pool) execution.
3// Requires Node v24+.
4//
5// Run: node examples/parallel-batch/main.ts
6
7import { workers } from '../../src/index.ts';
8import { heavyWork } from './heavy-work.ts';
9
10const items = Array.from({ length: 20 }, (_, i) => i + 1);
11
12// Sequential: each call awaits on the dedicated worker
13console.log('Sequential (dedicated worker)...');
14const seqStart = performance.now();
15const seqResults = [];
16for (const item of items) {
17 seqResults.push(await heavyWork(item));
18}
19const seqTime = (performance.now() - seqStart).toFixed(0);
20console.log(` ${items.length} items in ${seqTime}ms\n`);
21
22// Parallel: distribute across a pool of 4 workers
23let parTime: string;
24console.log('Parallel (worker pool, 4 workers)...');
25{
26 using run = workers(4);
27 const parStart = performance.now();
28 const parResults = await Promise.all(items.map((item) => run(heavyWork(item))));
29 parTime = (performance.now() - parStart).toFixed(0);
30 console.log(` ${items.length} items in ${parTime}ms\n`);
31}
32
33console.log(`Speedup: ~${(Number(seqTime) / Number(parTime)).toFixed(1)}x`);