dahlia-concurrency
Version:
High-level concurrency primitives and patterns for Node.js using worker_threads (queues, semaphore, mutex, worker pool, scheduler, and more)
24 lines (17 loc) • 677 B
JavaScript
const { MessageChannel } = require("node:worker_threads");
function createParallelPipeline(workers, transferData) {
if (!Array.isArray(workers)) {
throw new Error("workers is not an array!");
}
if (workers.length < 2) {
throw new Error("should be at least two workers!");
}
for (let i = 0; i < workers.length - 1; i++) {
const { port1, port2 } = new MessageChannel();
workers[i].postMessage({ port: port1, func: "send" }, [port1]); // send
workers[i + 1].postMessage({ port: port2, func: "receive" }, [port2]); // receive
}
workers[0].postMessage({ data: transferData });
return workers;
}
module.exports = { createParallelPipeline };