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));
}