web-dev-qa-db-ja.com

Node.jsがスケーラブルなのはなぜですか?

node.jsスケーラブル、それはどういう意味ですか? node.jsサーバーのどの部分がスケーラブルです。これはシングルスレッドテクノロジーであり、多くのCPUリソースを必要とするアプリケーションには適していないと読みました。これらの事実はスケーラビリティに適合しません。それでは、それはどういう意味ですか?

21
vuvu

ノードが実行するJavaScriptはシングルスレッドですが、ネットワークやファイルioなど、ノードで呼び出すものの多くはバックグラウンドスレッドで実行されます。基本的な概要については、この投稿を参照してください: ノードはシングルスレッドではありません

ざらざらした詳細が必要な場合は、スレッドをイベントループに変換する「魔法の」部分であるlibuvを調べる必要があります。 http://nikhilm.github.io/uvbook/basics.html#event-loops ==

さらに、ノード自体でCPUを集中的に使用する必要がある場合は、これを子プロセスに簡単に送信できます。詳細については、 http://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options を参照してください。

15
jedigo

それは「それ自体」よりスケーラブルではありません。特別なことをしなくても、(I/O)スケーラブルなだけです。

I/Oは、実行スレッド間でデータを共有しない傾向があるため、より安全で並列実行が容易です。 Node.jsを使用すると、シンプルでエレガント、そして使いやすいイベントプログラミングを使用してそれを行うことができます。古くて実績のあるプログラミングパラダイムであり、GUIや、ゲームなどの他のグラフィックを多用するアプリで長年使用されています。

実際、c ++、c、Javaなどの本格的な言語よりもスケーラビリティが低く、完全なマルチスレッドを使用することでスケールアウトが大幅に向上します。これにより、CPUのスケーリングも可能になりますが、ワームの缶も開かれます。 CPUを共有するには、データを共有する必要があります。これは別の話です(セマフォ、ロックなど)。

上記の言語のいずれかでnode.jsと同じことを行うことができますが、言語自体の一部ではないため、独自の言語を作成するか、それを提供するライブラリを使用する必要があります。とはいえ、それほど難しいことではありませんが、node.jsよりも確かに難しいです。

ほとんどのWebサービスはIOバインドされているため、Node.jsは適切に適合し、ほとんどの場合Okです。ただし、CPUを集中的に使用する作業を開始すると、イベントは処理されず、すべて停止します。その場合は、別の言語を使用することをお勧めします。Nodeには、実際に良い解決策はありません。複数のプロセスを生成できますが、それではできません。データを共有しないと、CPUを効率的に拡張する方法がないため、試さないでください。

IOにはNode.jsを使用し、CPUを集中的に使用する作業には適切なマルチスレッドを備えたより適切な言語を使用します。

3
FrameGrace

負荷分散によりスケーラブルです。基本的に、ノードが処理する複数のジョブを持つことができ、大きな負担なしでそれを処理できます。これにより、スケーラブルになります。

2
Apollo SOFTWARE

NodeのすべてのAPIは、コールバックをサポートするように記述されています。

たとえば、ファイルを読み取る関数は、ファイルの読み取りを開始し、制御をすぐに実行環境に戻して、次の命令を実行できるようにする場合があります。ファイルI/Oが完了すると、ファイルの内容をパラメーターとしてコールバック関数を渡しながら、コールバック関数を呼び出します。したがって、ファイルI/Oのブロックや待機はありません。これにより、Node.jsは、関数が結果を返すのを待たずに多数のリクエストを処理できるため、非常にスケーラブルになります。 -チュートリアルのポイント。

0
clever_bassi