私はC10K問題について読んでいますが、特に注目すべきは、非同期サーバーI/Oを参照する部分です。 http://www.kegel.com/c10k.html#aio
これは、スレッドがユーザーの要求を処理できるようにすることで、Node.jsがサーバー上で行うことをほぼ要約していると思います。I/ O割り込み(イベント)を使用して、スレッドに責任があるのではなく、完了したジョブのスレッドに通知します。フルCPUジョブ。スレッドは他のこと(非ブロッキング)に進み、ジョブが完了すると通知されます(たとえば、ファイルが見つかった、ビデオが圧縮された)。
これは、スレッドがソケットに対して、したがってサーバー上のユーザーに対してより「利用可能」であることを意味します。
それから私はこれを見つけました: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html
筆者はここで、イベント駆動フレームワーク(スレッドの中断)がスレッドを解放する可能性はあるが、実際にはCPUが実行する必要がある作業量を削減しないと主張しています。ここでの理論的根拠は、たとえば、ユーザーがアップロードしたビデオを圧縮するように要求した場合、CPUは実際にこのジョブを実行する必要があり、その間ブロックします(簡単にするため、ここでは並列処理を忘れましょう)。もっとよく知ってください!).
私は単純なコーダーであり、サーバー管理者などではありません。私が知りたいのは、Node.jsは「クラウドコンピューティング」の神々からの贈り物ですか、それともすべて熱気であり、スケーラビリティを改善することで実際に会社の時間やお金を節約しませんか?
どうもありがとう。
もちろん、CPUにバインドされた作業はすべてCPUを利用します。それはあなたがそれを書いたどんな言語またはフレームワークでもCPUをブロックするでしょう。
Node.jsは、CPUバウンドではなく、I/Oバウンドの作業がある場合に最適です。 Nodeでの重労働はできませんが、できます。 Node.jsは fibonacci number servers のような架空のまたは想像上の問題ではなく、実際の問題を解決します。 「熱風」ではありません。
C10Kのペーパーは実装の詳細に関して多少古くなっていますが、イベントベースの同時実行(reactorモデル)は、いくつかの点で、プリエンプティブスケジューリングよりも優れています。たとえば、プリエンプティブスケジューリングモデルは、スレッドがIOブロックされている間にスレッドをスケジュールします。これにより、ノード(およびRubyのイベントマシンやPythonのツイストなどの他のツール)がより多くの時間を費やすことにより、利用可能なサイクルをより適切に使用できるようになります。実際の仕事とより少ない時間のブロッキング。