如何在node.js中分配并行任务

时间:2012-05-24 03:28:12

标签: javascript node.js parallel-processing socket.io

我如何制作它以便我的服务器不会卡在for for循环中并且可以处理其他请求?如果我可以在我的服务器执行其他操作时并行执行for循环,那将是很好的。

    socket.on('drawing', function() {  
      for (var i = 0; i < x.length-1; i++)
      {
        //do stuff
      }  
    });

3 个答案:

答案 0 :(得分:4)

Async.js有一堆帮助函数,例如foreachwhilst,它们完全符合您的要求。

编辑:

以下是一个完整的例子:

async = require('async');

var i = 0

async.whilst(
    // test
    function() { return i < 5; },
    // loop
    function(callback) {
        i++;
        console.log('doing stuff.');
        process.nextTick(callback);
    },
    // done
    function (err) {
        console.log('done!');
    }
);

哪个输出:

doing stuff.
doing stuff.
doing stuff.
doing stuff.
done!

编辑2:将已命名的功能更改为注释,以避免让人感到困惑。

答案 1 :(得分:2)

你可以使用process.nextTick移动功能,但它不会真正并行,Node.js是一种事件驱动的语言,所以它并不真正做线程。 Here's概述了使用process.nextTick

答案 2 :(得分:1)

根据@ Slace的回答,您可以使用异步递归。

socket.on('drawing', function {
  var i = 0;
  (function someFunction() {
    if (i < x.length - 1) {
      i++;

      // Do stuff.

      process.nextTick(someFunction)
    } else {
      // Do something else.
    }
  }());  
});