PythonとRubyにはこのようなフレームワークもありますが、同期コードを含むライブラリは必然的に実際に使用されているため、成長しませんでした。 node.jsの前に、JavaScriptのサーバー側プログラミングはほぼ空白だったため、Node.jsはすべてのIOが非同期であるコードライブラリを確立することができました。
ほとんどのWebアプリケーションのボトルネックはIO、つまり、ディスクの読み取りと書き込み、ネットワークの読み取りと書き込み、およびデータベースの読み取りと書き込みです。この期間を待つために使用する戦略の種類が、パフォーマンスを改善する重要なポイントになりました。
PHPの戦略:複数のプロセスを実行し、IOが直接完了するのを待ちます。短所:複数のプロセスで複数のメモリを消費し、プロセス間でデータを共有することを困難にします。
C/C ++共通戦略:マルチスレッドを実行すると、プログラムはロックステータス自体を維持します。短所:開発コストが高く、間違いを犯しやすく、デバッグが困難です。
Python(Tornado):複数のリクエストが単一のプロセスで順番に実行され、IOに遭遇したときに別のリクエストに切り替えます。短所:単一のリクエストの場合、時間はまだ効率的に使用されていません。
「最も効率的に時間を使用する」とは何ですか?たとえば、2つの無関係なデータベースクエリがあります。 PHPでは、通常最初に実行され、2番目のものは実行が完了した後に実行されます(合計時間はA + B)。明らかに、これは最も効率的ではありません。 2つのクエリを同時に実行する必要があり、時間は最大(A、B)です。
MultiThreadingをサポートするPythonやその他の言語の問題は、言語レベルでは、プログラマーが仮想マシンに2つの操作を同時に実行する必要があることを伝えることは困難です。方法があっても、それは非常に厄介です。ほとんどの人は、使用するのが面倒です(使用する価値はありません)。 node.jsはすべてのio実行を非同期的に強制的に強制するため、node.jsプログラマーもそれに精通していると言えます。一部のライブラリと組み合わせて、コードの読みやすさ(Promise、Async)を改善するために、無関係な操作を並行して実行できるようになります。
上記は非同期IOの実装について説明しているので、非同期IOの利点はどこに反映されていますか?実際、非同期IOはサーバーの圧力を魔法のように減らすことはできません。サーバーを追加するには、サーバーを追加する必要がありますが、非同期IOは単一のリクエストの時間を短縮し、1つのリクエストで意味のない待機時間を削除します。したがって、単位時間内に処理されたリクエストは変更されていませんが、各リクエストの処理時間は短縮されています。この観点から、サーバーはいくつかのリソースを保存します。つまり、要求された各接続によって消費されるメモリを維持します。