/** @type {import('node:cluster').Cluster} */ const cluster = require("cluster"); const os = require("os"); const {randomInt} = require("crypto"); cluster.schedulingPolicy = cluster.SCHED_RR; async function main() { let master = new Map(); if(cluster.isPrimary) { let e = 0|0 while (e < 10) { e++; let flow = await generateFlow(); flow.send({ TYPE:"start" }) master.set(flow.id, flow); flow.message((_id, obj) =>{ for (const [id,{send}] of master) { if(_id !== id) { send({ ...obj, pid: flow.id }) } } }) }; }else{ let Application; let synced = []; process.on("message",data => { switch(data.TYPE) { case "start":{ Application = require("./Source/index"); break; } } }) } } async function generateFlow(N) { const worker = cluster.fork(); await new Promise(ok => { worker.addListener("online",()=> { ok() }) }); let id = worker.process.pid; return { id, send: message => worker.send(message), message: (callback) => worker.addListener("message", e => callback(id,e)) } } process.nextTick(main);