2017-02-16 5 views
0

私はscenerioを持っています クライアントがノード・サーバーに要求を送信し、ノードjsが1スレッドで処理すると仮定します。 私の質問は:Nodejsはシングルスレッドですが、同じ同時要求を1秒間に処理する方法

同じ1000リクエストを処理するのにかかる時間は、同じ瞬間に来る。

私は答えが1秒しかわかりません。しかし、私は方法を知らない。 それぞれ 要求が処理に1秒かかるため、1000秒かかるはずです。 。 シングルスレッドで1秒ですべてのリクエストを完了できることを教えてください

答えて

2

実際のフルCPU使用量がリクエストごとに1秒の場合、1000リクエストは処理に1000秒かかるでしょう。その周りに魔法の弾丸はありません。したがって、1000 /秒を処理するには、1000個のCPUが必要です(明らかに、多数のクラスタ化されたサーバーに分散しています)。

しかし、1秒の応答時間が実際に要求の合計時間にすぎず、node.jsがデータベースルックアップやファイル操作(どちらも非同期)を待っている場合は、 CPUは大部分の時間待機しており、1つの要求が一部の入出力操作が応答するのを待っている間に、別の要求を処理している可能性があります。そして、I/Oを待っているときに、別の要求を開始することができます。このようにして、1つのスレッドは同時に実行中の多数の異なる要求を持つことができます(これらの要求が処理の一部として非同期I/Oを行っているとします)。このようにして、node.jsは複数の異なる操作をインターリーブしますが、すべて1つのスレッドで行います。

これは、node.jsの設計の大きなメリットです。同時要求ごとにかなり重いスレッドを必要とするのではなく、実際には1つのスレッドで多数の要求を処理することができます。 OSレベルのスケジューリングと複数のスタックフレームを使用してOSレベルのスレッドをタイムスライスするのではなく、1つのJSがIを待っているためにシステムに制御を戻すたびに、event.jsはイベントキューの別のイベントを制御します/ O応答イベントが返されます。

任意の要求に対する実際のCPU時間が未満の1/1000分だった場合にのみ可能であるsinglethread

だけ1秒ですべての要求を完了することが可能であるかを教えてください2番目。それ以外の場合は、1000要求/秒を処理するために複数のCPUを使用する必要があります。リクエストを読んで1ms未満で応答を送信できることを話しているので、複数のネットワークカードも必要になるかもしれません。単一のネットワークカードではそうではありません。

+0

実際に、私はnodejsが1秒で機能を処理できることをあなたに尋ねたいと思います。だから、イベントルーピングのために、1秒間に1000の関数しか処理することはできません。 –

+0

@ J.Edy - 私は答えを与えたと思います。私の答えの一部についてまだ質問がある場合は、答えのどの部分を理解していないか教えてください。 nodejsが1秒間に行うことができる関数の数は、それらの関数が何をしているかによって決まります。一般的な答えはなく、具体的なコードに基づいた具体的な回答とおそらくいくつかのテストだけがあります。 – jfriend00

+0

@ J.Edy - これはあなたの質問に答えましたか?そうした場合は、回答の左側にある緑色のチェックマークをクリックしてコミュニティにその旨を示すことができます。スタックオーバーフロー時の適切な手順に従うことで、あなたの評判のポイントも得られます。 – jfriend00

関連する問題