少しの間、node.jsでコーディングを始めました。これが私の質問の1つです。
HTTP アプリでは、要求応答モデルが与えられているため、すべてのバックエンド タスクが完了して応答がクライアントに返されるまで、単一のアプリスレッドがブロックされるため、パフォーマンスの向上は、次のようなバックエンドの微調整にのみ限定されるようです。 IO リクエストの並列化。(まあ、この改善は、多くの重くて独立したIO 操作が関係している場合に重要ですが、通常、この状態は、データ構造を再設計することで、大量の IO 要求を排除でき、最終的にさらに優れたパフォーマンスが得られる可能性があることも意味します。並列化された操作を発行するだけではありません。 )
それが本当なら、Java (または PHP、Python など) に基づくフレームワークよりも優れたパフォーマンスを生み出すにはどうすればよいでしょうか?
また、node.js イベント ループの理解という記事も参照しました。この記事では、その状況についても説明しています。
実際には単一のスレッドが実行されています。並列コード実行はできません。たとえば、「スリープ」を実行すると、サーバーが 1 秒間ブロックされます。
while(new Date().getTime() < now + 1000) {
// do nothing
}
…ただし、コード以外はすべて並行して実行されます。
私は個人的に、「スリープ」コードを 1 つの IO コールバック クロージャーに正確に入れることで確認し、このコールバックにつながるリクエストを送信してから、別のリクエストを送信しました。どちらの要求も、処理時にコンソール ログをトリガーします。そして私の観察では、後者は前者が応答を返すまでブロックされていました。
では、両方の側がいつでもイベントを発行し、メッセージを相互にプッシュできるソケットモードでのみ、その非同期処理機能の全能力が利用されることを意味するのでしょうか?
私はそれについて少し混乱しています。コメントやアドバイスは大歓迎です。ありがとう!
アップデート
この質問をするのは、いくつかのパフォーマンス評価ケースが報告されているためです。たとえば、Node.js が Enterprise を引き継いでいます – 好むと好まざるとにかかわらず、LinkedIn は Rails から Node に移行しました: 27 台のサーバーが削減され、最大 20 倍速くなりました。一部の急進的な意見では、J2EE は完全に置き換えられると主張しています。