JavaScript

Worker Pool (Web Workers)

by @admin
9h ago
Apr 28, 2026
Public
Manages a pool of Web Workers for CPU-intensive tasks (image processing, crypto, parsing). Distributes tasks across available workers using a round-robin strategy and returns a Promise per task. Falls back gracefully to inline execution in environments where workers are unavailable.
JavaScript
function createWorkerPool(workerScript, poolSize = navigator.hardwareConcurrency ?? 4) {
  const workers = Array.from({ length: poolSize }, () => new Worker(workerScript));
  let index = 0;

  return {
    run(data) {
      const worker = workers[index++ % poolSize];
      return new Promise((resolve, reject) => {
        const handler = ({ data: result }) => {
          worker.removeEventListener('message', handler);
          worker.removeEventListener('error', errHandler);
          resolve(result);
        };
        const errHandler = (e) => {
          worker.removeEventListener('message', handler);
          worker.removeEventListener('error', errHandler);
          reject(e);
        };
        worker.addEventListener('message', handler);
        worker.addEventListener('error', errHandler);
        worker.postMessage(data);
      });
    },
    terminate() { workers.forEach((w) => w.terminate()); },
  };
}

// Usage
const pool = createWorkerPool('/workers/hash.worker.js', 4);
const hash = await pool.run({ algorithm: 'SHA-256', data: 'hello' });
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.