Nodejsはリクエストを処理するために1つのプロセスのみを使用すると言われており、I / Oを使用するこれらの関数は非同期で実行されるため、Webサーバーの効率が向上します。ただし、I / Oを処理するプロセスはカウントされませんか?マルチスレッドを使用して1つのスレッド内のすべてのリクエストを処理するApacheのような従来のWebサーバーと比較して、コスト(リクエスト+ I / O)は削減されますか?
1 に答える
はい、node.jsに必要なスレッドは1つだけです(オペレーティングシステムによっては、1つのプロセスを必要とするよりもさらに制限があります)。はい、これはプログラミング要件に影響します。
-あなたのプログラムは決してブロックしてはいけません!
node.jsが非常に高速である理由については、参照できるリソースがかなりあります。例:
http://www.manning.com/cantelon/NjsiA_meap_ch01.pdf
node.jsは、他のサーバーが必要とするコンテキストスイッチングによって課せられるスレッドペナルティを節約します(Slebetmanを参照)。2004年にC++で独自のサーバーを構築しました。パフォーマンス要件が高いため、サーバーが多くの接続を開閉する必要がある場合、このアプローチは実際に多くのリソースを節約します。
あなたがあなたの質問に欠けているのは、node.jsがO / Sに長い時間がかかる操作を渡し、答えでコールバックされるということだと思います。O/Sは完全にマルチプロセスです。したがって、node.jsはその制御に1つのスレッドのみを必要としますが、I/OはO/Sプロセスによって制御されます。
ただし、node.jsは、並列プログラムを実行できる追加のプロセスを生成できます。