如何在不阻止进一步执行的情况下在nodejs中添加数百万个数字?

How to add millions of numbers in nodejs without blocking the further execution?

我正在尝试在节点 js 中实现一个问题的解决方案,即:

例如:

你是:http://localhost/sum/5

应该return

"The sum of numbers from 1 to 5 is: 15"

如果

URL: http://localhost/sum/100

答案应该是:

"The sum of numbers from 1 to 100 is: 4950"

参数可以很大:

例如:

URL: http://localhost/sum/100000000 (千万)

服务器在任何时候都不应只处理一个请求。

我在某处读到 setImmediate 可能有帮助。

1 + 2 + 3 + ... + n 的总和可以表示为 n(n + 1) / 2。有关详细信息,请参阅 this link。

一般当你想要非阻塞执行时,你可以使用child_process模块: https://nodejs.org/api/child_process.html

一个例子看起来像这样:

//fork a new process
var cp = require('child_process');
var child = cp.fork('./intensiveTask.js',[],{});

//listen for messages from the child process
child.on('message', function(ret) {
    console.log("child process has finished", ret.data);
    //kill the child process
    child.kill();
});

//send a message to the child process
child.send({msg: "Foo"});

这里是子进程的代码(intensiveTask.js)

process.on('message', function(data) {
    //do the intensive work here
    var output=data.msg + " Bar";
    //send the output back to the parent
    process.send({msg: output});

});

我分享了一个可以帮助某人的代码片段-

var sum = 0
function run(number, cb) {
  sum += number;
  if(number === 15000) {
        return cb(sum);
  }
  ++number;
  setImmediate(run, number, cb);
}

run(1, (result) => {
  if(result) {
    console.log(result);
  }
});

上面的代码片段只是将 15000 数字和 returns 结果相加作为响应。一切都由 setImmediate 方法管理。从这里阅读更多- https://nodejs.org/api/timers.html