2

私はNode.jsと私が理解しているいくつかのポイントを学ぼうとしています:

  1. Node.jsは、リクエストごとに個別のプロセスを作成するのではなく、すべてのリクエストを処理する1つのプロセスにすぎません。

  2. これは非同期です。つまり、コールバックを長期的なプロセスにアタッチして、終了するのを待たずに残りの作業を続行できます。

私が本当に理解していないのは、node.jsを理解するという著者のポイントです-「コードを除いてすべてが並行して実行されます」。アナロジーとそれを説明するコードは理解しましたが、それでも「すべて」と「コード」の違いがわかりません。node.jsについてこれをよく耳にします。

また、1つの同時接続のメモリオーバーヘッドは8KBと低い場合があるため、node.jsの効率を高く評価していますが、CPU負荷についてはどうでしょうか。node.jsは、PHP + Apacheと比較してはるかに少なくなりますか?

4

4 に答える 4

5

Node.jsは、アプリケーションでJavaScriptを実行しているときはいつでも単一のスレッドを使用します。非同期のタスク(ネットワーク、ファイルシステムなど)はすべて、個別のスレッドで自動的に処理されます。これは、リソースのロックなどに伴うすべての問題を心配することなく、マルチスレッドアプリケーションの有用性の多くを得ることができることを意味します。

ノードはすべてのジョブのツールではありません。IOバウンドのアプリケーションに最適です。たとえば、アプリケーションがテンプレートを処理するために大量の作業を必要とする場合など、Nodeはおそらく適切ではありません。代わりに、データをシャッフルしているだけの場合、Nodeは非常に効果的です。

NodeがApacheのようなサーバーよりも高速であるとよく言われる理由は、Nodeがリクエストを処理するためのスレッドとすべてのリソースを作成しないためです。Apacheでは、ほとんどの場合、そのスレッド処理要求はネットワークまたはファイルシステムのデータを待機しています。これを行う間、それはリソースを浪費しています。Nodeを使用すると、(アプリケーションで)1つのスレッドのみがこれらの要求を処理します。繰り返しになりますが、これはいくつかの点で優れていますが、実行する処理が多い場合、これらの状況では一度に1つのリクエストしか処理できないため、Nodeは効果的ではありません。

このビデオは、説明するのにかなり良い仕事をしています: http ://www.youtube.com/watch?v=F6k8lTrAE2g&feature=youtube_gdata

于 2012-07-15T17:29:11.647 に答える
2

コードを除いて、すべてが並行して実行されます。

それはあなたがするならそれを意味します

while(true){}

コード内のどこでも、ノードアプリケーション全体が停止します。あなたが書いたコードが実行されている間、他には何もしません。リクエストは処理されず、レスポンスは返されません。何も返されません。ノードのCPUを占有しないように細心の注意を払う必要があります。

しかし、CPU負荷はどうですか?

これは、アプリケーションの性質と負荷に完全に依存します。アプリがビジー状態の場合は、より多くのCPUを使用します。

于 2012-07-15T17:20:37.813 に答える
2

真ん中に交通警官がいる混雑した交差点を想像してみてください。警官が適切に仕事をしているとき、何百台もの車が非常に速く効率的な方法で交差点を通過することができます。

警官がトラフィックを行っているときに自分のセルでSMSメッセージの受信と応答を開始すると、事態はすぐに手に負えなくなる可能性があります。

交通警官はあなたのnode.jsアプリであり、彼がSMSを行うのに費やす時間は、作者が「あなたのコード」と呼んでいるものです。

言い換えれば、node.jsのパフォーマンスは、交通警官として使用すればするほど輝きを増します。データのプルとプッシュ以外の目的(つまり、数値のリストの並べ替え、HTMLテンプレートのレンダリングなど)に使用し始めるほど、新しい接続をすばやく受け入れて処理する能力が低下します。

于 2012-07-15T17:31:41.693 に答える
1

「すべて」とは、コード以外のすべてを指します。たとえば、HTTPを処理するもの。同じことを別の言い方をすると、「コードは、TCPを介してデータを送信するなど、node.jsが処理を実行するのを待機しません。これは、非同期で実行されるためです」。

2番目の質問に答えるために、どちらのCPU負荷が少ないかはわかりませんが、似ていると思います。Node.jsの宣伝されている利点は、前述の非同期性によりCPUがより有効に活用されることです。

于 2012-07-15T17:27:49.743 に答える