Node.jsは実際にスケーラビリティを向上させますか?


21

私はC10Kの問題について読んでいますが、特に注目すべきは非同期サーバーI / Oを指す部分です。http://www.kegel.com/c10k.html#aio

これは、スレッドがI / O割り込み(イベント)に依存しながら、スレッドがユーザーの要求を処理できるようにすることで、Node.jsがサーバー上で行うことをほぼ要約していると思います。フルCPUジョブ。スレッドは、他のこと(非ブロッキング)を利用して、ジョブが完了したとき(たとえば、ファイルが見つかった、またはビデオが圧縮されたとき)に通知を受けることができます。

これは、その後、スレッドがソケット、つまりサーバー上のユーザーにとってより「利用可能」であることを意味します。

それから私はこれを見つけました:http : //teddziuba.com/2011/10/straight-talk-on-event-loops.html

ライターは、イベント駆動型フレームワーク(割り込みスレッド)がスレッドを解放するかもしれないが、実際にはCPUがしなければならない作業量を減らさないと主張しています。ここでの理由は、たとえば、ユーザーがアップロードしたビデオを圧縮するように要求した場合、CPUは実際にこのジョブを実行する必要があり、それを実行中にブロックすることです(簡単にするために、ここでは並列性を忘れます-もっとよく知って!)。

私は簡単なコーダーであり、サーバー管理者などではありません。知りたいのは、Node.jsが「クラウドコンピューティング」の神からの贈り物なのか、それとも熱気であり、実際にスケーラビリティを改善して企業の時間やお金を節約できないのか、ということです。

どうもありがとう。


12
1つ目はトロール、2つ目はnode.jsはCPUバウンドアプリケーションではなくIOバウンドアプリケーション向けです。必要なのは、この2つの組み合わせです。CPUにバインドされたものはすべて、新しいスレッド/プロセスに入ります。IOにバインドされたものはすべてイベントループに入ります。
レイノス

1
+!その男は間違いなくトロルです。
パトリックヒューズ

それはあなたが比較するものに依存します-まだ何らかの理由でApacheを使用している場合-Nodeは神からの贈り物ですが、それをNginxと比較すると-改善はそれほど劇的ではなく、Nodeはさらに遅くなります。(10倍遅く、20msの対2msのは、responceを生成するために、しかし我々のテストでは、nginxのは適度に重い負荷の下で504を与えていた、そしてノードは正常な応答を与えていました)。
c69

トロールの男は明らかにトロールです。@ c69それは良い情報です、どうもありがとう。
アレックス

「イベントループに関するストレートトーク」リンクが機能しなくなりました。
ロバートハーヴェイ

回答:


20

もちろん、CPUにバインドされた作業はすべてCPUを使用します。あなたが書いた言語やフレームワークでCPUをブロックします。

Node.jsは、CPUバウンドではなくI / Oバウンドの作業に最適です。Nodeで重い作業はしませんが、できます。Node.jsは、フィボナッチ数サーバーのような架空の問題や想像上の問題ではなく、実際の問題を解決します。「熱風」ではありません。


ただ、いくつかのベンチマークをチェックし、実際にそれが提供するページで、より高速な方法に思えるん:zgadzaj.com/...を ..私はこれは私が後に...何であったかと思い
アレックス・

3
@AlexW:これらのベンチマークの良い点は、本質的に静的コンテンツを提供しているということです。数百万のヒットデイの作品ご覧ください。そのためにPHPインタープリターを起動するのは無駄です。ファイルディレクトリを提供するためのnode-staticのようなものを見てください。
ジョシュK

@ AlexW、zgadzaj.com /…がnode.js 0.1.103を使用していることを思い出させてください
サミヤックブータ

4

C10Kの論文は実装の詳細に関しては多少古くなっていますが、イベントベースの同時実行性(リアクタモデル)は、プリエンプティブスケジューリングよりも優れています。たとえば、プリエンプティブスケジューリングモデルは、IOブロック中にスレッドをスケジュールできます。これにより、ノード(およびRubyのイベントマシンやPythonのTwistedなどの他のツール)は、実際の作業により多くの時間を費やし、ブロッキング時間を短縮することにより、利用可能なサイクルをより有効に使用できます。


-1

マルチスレッドはパフォーマンスを引き続き向上させます。元の説明は、複数のコアの存在を考慮していないため、ばかげています。コアが複数ある瞬間、スレッドはもはやスレッドではありません。それらはハイパースレッドです。スレッドを集中的に使用するアプリケーションは、シングルスレッドアプリケーションよりも多くの恩恵を受けます。


2
ただし、これはNode.JSの熱意を実際には説明しません。Node.JSの主な利点は、単一のスレッドから複数の要求を迅速に処理およびディスパッチする能力であり、答えが対処していない重いバックグラウンドワークロードを効果的に処理しないことです。
ロバートハーベイ

node.jsの主な利点は、フロントエンドとバックエンドに単一の言語を使用できることです。これらの他のすべての主張は、それがより重要に見えるようにするための単なる綿毛です。
whatsisname

2
@whatsisnameの単一スレッド同時実行は、私の意見では単一の言語を使用するよりもはるかに大きな大きな利点です。
-20:
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.