RosettaCodeData/Task/Parallel-calculations/JavaScript/parallel-calculations-2.js

39 lines
1.0 KiB
JavaScript

var numbers = [12757923, 12878611, 12757923, 15808973, 15780709, 197622519];
var workers = [];
var worker_count = 0;
var results = [];
for(var i = 0; i < numbers.length; i++) {
worker_count++;
workers[i] = new Worker("parallel_worker.js");
workers[i].onmessage = accumulate;
workers[i].postMessage({n: numbers[i], id: i});
}
function accumulate(event) {
n = event.data.n;
factors = event.data.factors;
id = event.data.id;
console.log(n + " : " + factors);
results[id] = {n:n, factors:factors};
// Cleanup - kill the worker and countdown until all work is done
workers[id].terminate();
worker_count--;
if(worker_count == 0)
reduce();
}
function reduce() {
answer = 0;
for(i = 1; i < results.length; i++) {
min = results[i].factors[0];
largest_min = results[answer].factors[0];
if(min > largest_min)
answer = i;
}
n = results[answer].n;
factors = results[answer].factors;
console.log("The number with the relatively largest factors is: " + n + " : " + factors);
}