【问题标题】:How to assign parallel tasks in node.js如何在 node.js 中分配并行任务
【发布时间】:2012-05-25 03:26:37
【问题描述】:

如何使我的服务器不会在执行 for 循环时卡住并可以处理其他请求?如果我可以在我的服务器执行其他操作的同时并行执行 for 循环,那就太好了。

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

【问题讨论】:

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


    【解决方案1】:

    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:将命名函数更改为 cmets 以避免混淆。

    【讨论】:

      【解决方案2】:

      您可以使用process.nextTick 将功能移开,但它不会是真正的并行,Node.js 是一种事件驱动语言,因此它并不真正执行线程。 Here's使用process.nextTick的概述。

      【讨论】:

        【解决方案3】:

        根据@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.
            }
          }());  
        });
        

        【讨论】:

          猜你喜欢
          • 2013-10-07
          • 2015-08-23
          • 1970-01-01
          • 2017-07-14
          • 1970-01-01
          • 2010-11-03
          • 2021-12-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多