2016-04-15

orleanz: (main)
2016-04-15 12:21 pm

Параллельные вычисления в однопоточном Javascript

Имитируем многопоточное вычисление условий в операторе ИФ

(Имитируем, потому что, насколько я понимаю, это только на уровне логики программы тут у нас все идет параллельно и поэтому иногда первый промис быстрее второго, иногда наоборот, а на уровне исполнения - JS движок исполняет все в одной треде. Для того, чтобы была настоящая, честная много-поточность, можно использовать https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers, там действильно задачи будут распределяться по ядрам процессора равномерно).

Пример ниже запускается в Нодной консоли

var p1 = new Promise(function(resolve, reject) {
  setTimeout( resolve, Math.random() * 4000 + 1000, " One is done");
});
var p2 = new Promise(function(resolve, reject) {
  setTimeout( resolve, Math.random() * 4000 + 1000, " Two is done");
});

p1.then(function(a) {console.log(a);});
p2.then(function(a) {console.log(a);});

Promise.race([p1, p2]).then(function(value) {console.log("race complete: " + value);});

setTimeout(function() {console.log("Program quit\n");}, 6000)