Javascript 如何在nodejs中添加数百万个数字而不阻止进一步的执行?
我正在尝试在node js中实现一个问题的解决方案,即: 例如: Ur是: 应该回来 “从1到5的数字之和为:15” 如果 网址: 答案应该是: “从1到100的数字之和为:4950” 参数可能很大: 例如: 网址: (一千万) 服务器在任何时候都不应该只处理一个请求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
我在某个地方读到了一些可能有用的东西。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);
}
});