ホームページ >バックエンド開発 >C#.Net チュートリアル >ASP.NET MVC で非同期プログラミング テクノロジを正しく使用する方法

ASP.NET MVC で非同期プログラミング テクノロジを正しく使用する方法

黄舟
黄舟オリジナル
2017-09-07 13:40:422463ブラウズ

1. 同期と非同期とは何ですか?

同期(英語: Synchronization )とは、システム内で発生するイベントを調整して、時間の一貫性と統一を実現することを指します。端的に言えば、複数のタスクが1つずつ実行され、同時に実行されるタスクは1つだけです。

非同期(英語: Asynchronization )とは、CPU が現在のリクエストに対する応答を一時的に保留し、次のリクエストを処理し、ポーリングなどの方法でコールバック通知を受け取った後に実行を開始することを指します。マルチスレッドは、非同期操作を別のスレッドに入れて実行し、ポーリングまたはコールバック メソッドを通じて完了通知を取得します。ただし、完了ポートでは、オペレーティング システムが非同期操作のスケジューリングを引き継ぎ、非同期操作が完了するとコールバック メソッドをトリガーします。このメソッドはハードウェア割り込みを行いません。追加のスレッドが必要です。

2. ASP.NET MVC プロジェクトで非同期コントローラーを使用する必要があるのはどのような場合ですか?

2.1. ASP.NET MVC で非同期を使用する必要があるのはなぜですか?

IIS には、ユーザー要求を処理するためのスレッド プールがあります。新しい要求が来ると、プール内のスレッドがその要求を処理するようにスケジュールされます。ただし、同時実行量が多い場合、プール内のスレッドはすでに処理されています。多数のリクエストを処理できない場合、プール内の各スレッドはビジー状態になり、リクエストを処理するスレッドはリクエストの処理中にブロックされ、リクエスト キューがいっぱいになると、スレッドは別のリクエストを処理できなくなります。 Web サーバーはリクエストを拒否し、HTTP 503 ビジー状態になります。ネットワーク操作などの高い遅延を処理している場合、これらのスレッドのほとんどはその状態で待機するだけで、ほとんどの場合何も実行しません。非同期プログラミングを使用すると、このようなスレッドをより有効に活用できます。

3. 同期および非同期の使用シナリオ

シナリオの説明 1: リクエストが完了するまでに 2 秒かかるネットワーク呼び出しを生成する場合、リクエストが同期的に実行されるか非同期的に実行されるかに関係なく、リクエストには 2 秒かかります。 ただし、非同期呼び出し中、サーバーは最初のリクエストが完了するまで待機している間、他のリクエストへの応答をブロックしません。 したがって、非同期リクエストは、長時間実行される操作を呼び出すリクエストが多数ある場合に、リクエストのキューイングを防ぎます。

シナリオの説明 2: それぞれ 500、600、700 ミリ秒かかる 3 つの操作があるとします。同期呼び出しの場合、合計応答時間は 1800 ミリ秒をわずかに超えます。ただし、非同期呼び出し (同時実行) の場合、合計応答時間は 700 ミリ秒をわずかに超えることになります。これは、これが最も長いタスク/操作の継続時間であるためです。したがって、非同期アクション メソッドは、アクションで複数の独立した長時間実行操作を実行する必要がある場合に役立ちます。

3.1. 次の条件が満たされる場合は、同期パイプラインを使用します:

1)、操作が非常に簡単であるか、実行時間が非常に短い。

2) シンプルさは効率よりも重要です。

3) この操作は、大量のディスクやネットワークのオーバーヘッドを伴う操作ではなく、主に CPU 操作です。 CPU バウンドの操作に非同期操作メソッドを使用してもメリットはなく、オーバーヘッドも増加します。



3.2. 次の条件が満たされる場合は、非同期パイプラインを使用します:

1)、操作は CPU バウンドではなく、ネットワーク バウンドまたは I/O バウンドです。

2)、テストでは、ブロック操作が Web サイトのパフォーマンスのボトルネックであることが示されており、これらのブロック呼び出しに非同期操作メソッドを使用することで、IIS はより多くのリクエストを処理できるようになります。

並列性はコードの単純さよりも重要です。

3) ユーザーが長時間実行されているリクエストをキャンセルできるメカニズムを提供したいと考えています。



4. Q&Aセッション

4.1. 非同期によりアプリケーションの応答性が大幅に向上しますか?では、ASP.NET MVC がすべて非同期コントローラー (AsyncController) を使用する場合、どのような影響があるでしょうか?高スループット、高同時実行の Web サイトになるでしょうか?

コードに async を追加するだけでは、実際にはスループットを向上させるために、非同期が必要な場合 (IO) に非同期実行を実行する必要があります。非同期コントローラーは、主にデータの読み取りや書き込みなどの I/O 集中型の操作に使用され、その操作は比較的独立しています。CPU を集中的に使用する操作は非同期操作には適していません。非同期で処理しているか同期で処理しているかに関係なく、最終的には CPU が満たされます。したがって、非同期操作は確かに同時実行数を増やす効果を実現できますが、それはそれを使用する場所によって異なります。すべての非同期コントローラーを使用しても、サイトのパフォーマンスが確実に向上するわけではありません。

以上がASP.NET MVC で非同期プログラミング テクノロジを正しく使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。