2016-07-08 2 views
1

私はそれがあるJSノードに問題のソリューションを実装しようとしています。たとえばさらなる実行をブロックせずにnodejsに何百万という数字を追加するには?

ウルは次のとおりです。http://localhost/sum/5

は1から

「の数字の合計を返す必要があります5にある:15"

もしURL: http://localhost/sum/100

答えは次のようになります。

"1から100までの数字の合計がある:4950"

パラメータは巨大になります

例えば:

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

サーバーは、1回のリクエストだけを処理することができません。

私はどこかでsetImmediateが役に立つかもしれないと読んでいます。

答えて

1

1 + 2 + 3 + ... + nの合計はn(n + 1)/ 2で表すことができます。詳細はthisリンクを参照してください。

あなたは非ブロッキング実行をするとき、あなたはchild_processモジュールを使用することができ、一般的に
+0

こんにちは、私は答えをいただきありがとうございます。それは動作しますが、私はループとすべてを使用して、プログラムを使用してこのことをしたいです。私はノードjsまたはjavascriptのいくつかの機能を探しています。これにより、ブラウザを掛けずに何百万もの数字を追加できます。何かのsetImmediateのように。 –

+0

私は彼が聞きたかったものではないと思います。あなたの数式は正しいです。 – Stefan

+0

あなたが提示している問題を正確に解決することを目指しているのであれば、数式を使用することは間違いなく最も効率的なアプローチです。それが大量の計算を必要とするリソースの単なる例だったなら、これは正しい解決策ではないことがわかります。あなたが提示している問題が本当に解決したいのであれば、単純な式を実装するのではなく、なぜ強制的にループさせたいのですか? – flott

1

:ここ

//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"}); 

は、(子プロセスのコードです: https://nodejs.org/api/child_process.html

の例では、このようになります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}); 

}); 
関連する問題