JavaScript: real parallelism with worker threads

To use more than one core, Node.js provides worker_threads. Each Worker runs its own JavaScript engine with its own memory, so workers do not share ordinary variables. They communicate by messages: data passed in workerData or sent with postMessage is copied (or transferred).

JavaScript
const { Worker, isMainThread, parentPort, workerData } = require("node:worker_threads");

if (isMainThread) {
  const data = Array.from({ length: 1000 }, (_, i) => i + 1);
  const halves = [data.slice(0, 500), data.slice(500)];
  const jobs = halves.map((part) => new Promise((resolve, reject) => {
    const worker = new Worker(__filename, { workerData: part });
    worker.on("message", resolve);
    worker.on("error", reject);
  }));
  Promise.all(jobs).then((sums) => {
    console.log(sums.join(" ") + " total " + sums.reduce((a, b) => a + b, 0));
  });
} else {
  parentPort.postMessage(workerData.reduce((a, b) => a + b, 0));
}
Read the full lesson