2015-07-07 3 views
0

Я вывешивать ниже фрагмент кода, который «не асинхронные функции»Как запустить все функции параллельно

var flag = false; 
function a() { 
    var a = 0; 
    for (var i = 0; i < 10000000; i++) { 
     a++; 
    } 
    console.log("first fun finished!"); 
    flag = true; 
}; 

function b() { 
    var a = 0; 
    for (var i = 0; i < 10000000; i++) { 
     a++; 
    } 
    console.log("second fun finished!"); 
}; 

function c() { 
    var a = 0; 
    for (var i = 0; i < 10000000; i++) { 
     a++; 
    } 
    console.log(a) 
}; 
a(); 
b(); 
console.log("This should be good"); 
if (flag) { //Should wait for this value before c() is called 
    c(); 
    console.log("third fun finished!") 
} 

Если мы побежим выше пример, это должно быть хорошо и с() функция, будет должны ждать до тех пор, пока функции() и b() не закончатся. Я ожидаю, что все функции должны запускаться parrallel (многопоточные (асинхронные) функции). Может ли кто-нибудь помочь мне, как я могу достичь этого, используя nodejs

+2

единственным способом это будет возможно через ребенок процессов (потому что они работают в отдельных потоках) –

+0

@KevinB вы можете мне помочь с любым псевдо? – user4324324

+0

Я мог бы что-то взбить, но я никогда не использовал дочерние процессы, поэтому лучше было бы найти путеводитель. Суть его заключается в том, что каждое отдельное действие вы переносите в свое «приложение», и вы используете модуль узла (встроенный), чтобы создать процесс, который запускает эти приложения параллельно, пока они не закончатся. –

ответ

0

Использовать Promise.all или Promise.join.

var Promise = require('bluebird'); 
return Promise.join(Promise.resolve().then(a), 
        Promise.resolve().then(b), 
        Promise.resolve().then(c), 
        function(){console.log('complete')}); 
0

Как это упоминалось в комментариях вы можете использовать child_process или cluster.fork. Вот простой child_process.spawn реализация:

(Если вы не хотите использовать Eval затем записать эти функции в отдельных файлах и называть их)

var spawn = require('child_process').spawn 
... 

spawn('node',['-e', '('+a.toString()+')()']) // send the function as string and evaluate in node 
    .stdout.on('data', console.log.bind(console)) 
    .on('close',function(){ 
    //call c() when a() ended 
    c() 
    }) 
    .setEncoding('utf8') 

spawn('node',['-e', '('+b.toString()+')()']) 
    .stdout.on('data', console.log.bind(console)) 
    .setEncoding('utf8') 
Смежные вопросы