2016-07-08 41 views
1

我想實現在節點JS的問題是解決方案:如何在不阻止進一步執行的情況下在nodejs中添加數百萬個數字?

例如:

烏爾是:http://localhost/sum/5

應該返回

「號從1總和5:15"

如果

網址:http://localhost/sum/100

答案應該是:

「號從1到100的總和:4950」

參數可以是巨大的:

例如:

網址:http://localhost/sum/100000000 (千萬)

服務器在任何時候都不應該卡住處理只有一個請求。

我在某處讀了setImmediate可能會有所幫助。

回答

1

1 + 2 + 3 + ... + n的總和可以用n(n + 1)/ 2表示。有關更多信息,請參閱this鏈接。

+0

嗨弗洛特,謝謝你的答案是一個數學公式。這工作,但我想用程序來做這件事,使用循環和所有。我正在尋找節點js或javascript的一些功能,這將允許我在不掛上瀏覽器的情況下添加數百萬個數字。像set一樣的東西。 –

+0

我認爲那不是他想聽到的。即使你的公式是正確的。 – Stefan

+0

如果您的目標是準確解決您所提出的問題,那麼使用數學公式毫無疑問是最有效的方法。如果這僅僅是一個需要大量計算的資源的例子,我認爲這不是正確的解決方案。如果您提出的問題是您真正想要解決的問題,那麼您爲什麼要強制循環而不是實施簡單的公式? – flott

1

一般來說,當你想非阻塞執行,你可以使用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}); 

}); 
相關問題