Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在nodejs中添加数百万个数字而不阻止进一步的执行?_Javascript_Node.js_Nonblocking - Fatal编程技术网

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

Javascript 如何在nodejs中添加数百万个数字而不阻止进一步的执行?,javascript,node.js,nonblocking,Javascript,Node.js,Nonblocking,我正在尝试在node js中实现一个问题的解决方案,即: 例如: Ur是: 应该回来 “从1到5的数字之和为:15” 如果 网址: 答案应该是: “从1到100的数字之和为:4950” 参数可能很大: 例如: 网址: (一千万) 服务器在任何时候都不应该只处理一个请求 我在某个地方读到了一些可能有用的东西。1+2+3+…+之和n可以用n(n+1)/2表示。有关更多信息,请参阅链接。通常,当您需要非阻塞执行时,可以使用子进程模块: 示例如下所示: //fork a new process var

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

例如:

Ur是:

应该回来

“从1到5的数字之和为:15”

如果

网址:

答案应该是:

“从1到100的数字之和为:4950”

参数可能很大:

例如:

网址: (一千万)

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


我在某个地方读到了一些可能有用的东西。

1+2+3+…+之和n可以用n(n+1)/2表示。有关更多信息,请参阅链接。

通常,当您需要非阻塞执行时,可以使用子进程模块:

示例如下所示:

//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)


我正在分享一段代码片段,可以帮助别人-

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个数字,并在响应中返回结果。一切都由setImmediate方法管理。阅读这里的更多内容-

嗨,弗洛特,谢谢你的回答,这是一个数学公式。这是可行的,但我想用一个程序,用循环和所有的东西来做这件事。我正在寻找NodeJS或javascript的一些功能,这些功能允许我在不挂断浏览器的情况下添加数百万个数字。我想那不是他想听的。即使你认为公式是正确的。如果你的目标是准确地解决你提出的问题,使用数学公式无疑是最有效的方法。如果这只是一个需要大量计算的资源的例子,我认为这不是正确的解决方案。如果你提出的问题是你真正想要解决的问题,为什么你要强行循环它而不是实现简单的公式?是的,你是对的!但这是我问题的简单解决方案。考虑一个情况,我需要上传10000个文件的时间。它会挂断我的浏览器。因此,我正在寻找一种解决方案,它可以在不挂起用户浏览器的情况下工作。我似乎并不完全理解您的问题,如果您想让事情看起来像是并行处理的,您应该使用一些线程库。否则,我想你需要考虑这样一个事实:你只得到有限的处理资源,或者把它拆分,或者使用更聪明的算法来完成事情。
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);
  }
});