我想實現在節點JS的問題是解決方案:如何在不阻止進一步執行的情況下在nodejs中添加數百萬個數字?
例如:
應該返回
「號從1總和5:15"
如果
答案應該是:
「號從1到100的總和:4950」
參數可以是巨大的:
例如:
網址:http://localhost/sum/100000000 (千萬)
服務器在任何時候都不應該卡住處理只有一個請求。
我在某處讀了setImmediate可能會有所幫助。
我想實現在節點JS的問題是解決方案:如何在不阻止進一步執行的情況下在nodejs中添加數百萬個數字?
例如:
應該返回
「號從1總和5:15"
如果
答案應該是:
「號從1到100的總和:4950」
參數可以是巨大的:
例如:
網址:http://localhost/sum/100000000 (千萬)
服務器在任何時候都不應該卡住處理只有一個請求。
我在某處讀了setImmediate可能會有所幫助。
1 + 2 + 3 + ... + n的總和可以用n(n + 1)/ 2表示。有關更多信息,請參閱this鏈接。
一般來說,當你想非阻塞執行,你可以使用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});
});
嗨弗洛特,謝謝你的答案是一個數學公式。這工作,但我想用程序來做這件事,使用循環和所有。我正在尋找節點js或javascript的一些功能,這將允許我在不掛上瀏覽器的情況下添加數百萬個數字。像set一樣的東西。 –
我認爲那不是他想聽到的。即使你的公式是正確的。 – Stefan
如果您的目標是準確解決您所提出的問題,那麼使用數學公式毫無疑問是最有效的方法。如果這僅僅是一個需要大量計算的資源的例子,我認爲這不是正確的解決方案。如果您提出的問題是您真正想要解決的問題,那麼您爲什麼要強制循環而不是實施簡單的公式? – flott