Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.

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

Your Name: Code Language: