2012-08-02 23 views
5

私はthis questionからのbenefits-of-async/await-on-ASP.NETのバリエーションを持っています。ASP.NET async /パート2を待つ

私の理解では、非同期性は並列性と同じではありません。だから、Webサーバー上では、async/awaitがASP.NETページにどのくらいの利益をもたらしているのだろうかと思います。

IIS + ASP.NETはすでにスレッド用にスレッドを割り当てていないのですか?また、onenページがリソースを待っている場合、サーバーは別の要求の処理に切り替えますか?

プールに使用するスレッドの数が限られています。非同期で使用すると効果的ですか?

Skeet氏が上記の質問に答えて指摘したように、私たちはUIスレッドをブロックすることではありません。私たちはすでにマルチスレッドであり、リクエストのすべてのタスクが非同期または非同期で完了するまで、Webレスポンスを完了できません。

私はそれがこれですし沸く何を推測:

がそれにブロック対ASP.NETページ内のリソース(例えば、ファイルやDB要求)の非同期読み込みにどんなメリットがありますか?

+0

あなたは実際にあなたが言ったJon Skeetの答えを読んだことがありますか?彼はASP.NETで 'async'を使う利点を説明しています。 – svick

+0

@スヴィク:読んでいただきありがとうございます。はい、私はジョンの答えを読んでいますが、非常に多くの場合、彼は "それは依存している"と言っています。私は彼が与えることができる唯一の答えだと思います。大量のWebサーバーでのasync/awaitのスレッドの影響を理解したいと思います。 – n8wrl

答えて

8

1ページがリソースの待機中にビジー状態になると、サーバーは処理が必要な別のリクエストの処理に切り替えます。

私はそうは思わない。私は非常にこれが驚いているだろう。理論的には可能ですが、非常に複雑です。

ASP.NETで使用するスレッドには、限られた数のスレッドしかありません。非同期で使用すると効果的ですか?

はい、await何かの場合、その要求のスレッドはすぐにプールに返されます。

私たちはすでにマルチスレッドであり、リクエストのすべてのタスクが非同期かどうかが完了するまでWeb応答を完了できません。

これは間違いありません。サーバーのシナリオではasyncは、スレッドプールの負荷を排除することです。

ASP.NETページでリソースを非同期に読み取って(ファイルやDB要求など)リソースブロックをブロックする利点はありますか?

絶対に!

ファイル/サービス呼び出し/ db要求をブロックすると、そのスレッドはその操作の間使用されます。 awaitファイル/サービスコール/ db要求の場合、そのスレッドはただちにスレッ​​ドプールに返されます。

これは、進行中のリクエストがあることがありますが、(a)何らかの操作を待っている間に、そのリクエストにサービスしているはありません。スレッドがあります。あなたが望むなら、ゼロスレッドの同時実行性。

操作が完了すると、メソッドはスレッドプールからのawait - (おそらく異なる)スレッドの後に再開します。

結論:asyncはスレッドよりもスケーラビリティが高いため、サーバー側には明らかに利点があります。

詳細情報:自分自身intro to async postthis awesome videoです。

+0

あなたの最新の[回答](http://stackoverflow.com/a/30574578/1497596)からの警告:「単一のデータベースバックエンドでASP.NET MVCについて話しているなら、 SQL Server(または他の古典的なRDBMS)の単一インスタンスよりもはるかに多くの同時要求を処理できるためですが、バックエンドがより現実的であれば - SQLサーバクラスタ、Azure SQL、NoSQLなど - バックエンドは拡張性があり、スケーラビリティのボトルネックはIISであり、* as *はasyncからスケーラビリティの利点を得ることができます。 – DavidRR

関連する問題