Nodejs服务器-通过使循环迭代异步来提高性能



考虑以下服务器端nodejs代码。假设循环中的代码是原子的(代码应该执行一次),并且迭代之间没有依赖关系。。。

for (var i=0; i<aVeryLargeValue; i++){
    //do atomic complex calculations
} 

有没有一种方法可以通过将循环划分为多个部分来提高服务器性能,以便异步执行迭代?

您的问题似乎是aVeryLargeValue导致服务器处理此循环的时间过长,从而阻碍了其他请求。

使用async模块进行处理。您可以使用whilst函数将循环分解为多个部分。

var async = require('async');
var aVeryLargeValue=99999;
var i=0;
async.whilst(
  function() { return i < aVeryLargeValue; },
  function(callback) {
    for(x=i;x<i+1000;x++) {
      //do something
    }
    i+=1000;
    callback();
  },
  function(err) {
    if(err) throw err;
  }
);

如果这真的是CPU密集型的东西,那么你最好用一个子进程来处理它。上面的代码主要适用于当你必须处理一个可能需要几秒钟时间的大型请求,但你不想在这几秒钟内搁置其余请求的时候。如果您的处理时间将超过几秒钟,那么您应该将其卸载到子进程。

当然,您可以将循环拆分为任意多个部分,但由于开销的原因,摘要执行时间会更糟。

据我所知,没有办法在JavaScript中运行并行循环(分别为node.js)。

最新更新