Paste
Pasted as JavaScript by vall370 ( 6 years ago )
const cluster = require('cluster');
const numberOfWorkers = require('os').cpus().length;
const hugeData = [];
for (let i= 0; i < 50000; i++){
i2 = Math.round(Math.random() * 5000);
hugeData.push(i2)
}
if (cluster.isMaster) {
const eachWorkerDataProceed = Math.floor(hugeData.length / numberOfWorkers);
let sortedArrayCount = 0, sortedArrays = [];
for (let i = 0; i < numberOfWorkers; i++) {
const worker = cluster.fork();
worker.on('message', (data) => {
sortedArrayCount++;
sortedArrays.push(data)
if (sortedArrayCount == numberOfWorkers) {
console.log('all data done', sortedArrays)
// now can merge all sorted arrays
}
})
// send data to workers
worker.send(hugeData.slice(i * eachWorkerDataProceed, (i + 1) * eachWorkerDataProceed))
}
} else {
// cluster.isWorker == true, `process` in here refers to current worker
process.on('message', (data) => {
// send data to master process
process.send(data.sort())
// be careful that kill worker when it has been finished
process.kill(process.pid)
})
}
Revise this Paste