2011-09-15 6 views
2

ASP.NETで非同期操作を使用するときは、やや曖昧です。 Twitter APIを呼び出すなどの外部Webサービスを呼び出すときはいつでも、非同期操作を使用してCLRスレッドを解放して他の要求に対応できるようにする必要があります。ASP.NET、非同期、いつ使用するのですか?

あなたの操作がCPUを効率的に使用している場合、コンテキストスイッチのペナルティがあるため非同期操作をしないでください。ただし、長い操作をしていて、コンテキストスイッチを行う価値があります。

ローカルWebサービスへのajax呼び出しを使用してデータベース操作(約3秒かかります)を行い、JSONを返し、JQueryを使用してページ自体を戻すページについては、 4秒?

page_loadの伝統的なWebフォームは、同じデータベース操作呼び出し(3秒)を行った後、さらに3秒間レンダリングしますか?たとえば、1000のコメントを持つ大きなフォーラムの投稿ですか?

私の一般的な印象は、すべての操作がコンテキストスイッチのペナルティなしで非ブロックであるように、すべての操作がデフォルトでバックグラウンドで非同期になるようにIISを設計すべきではないということです。それはnode.jsの考えですか?静的なページがあり、待機中の操作がない場合は、特に同期ページを作成する必要がありますか?基本的に今起こっていることの逆ですか?

ありがとうございます。

答えて

0

非同期要求の唯一の利点は、ワーカースレッドを解放できることです。したがって、ワーカースレッドが不足している場合にのみ気付くでしょう。デフォルトでは、CPUあたり100スレッドあります。したがって、1 CPUあたり4秒あたり100リクエストを超える場合を除き、パフォーマンスの向上に気付かないでしょう。

非同期要求の欠点は、コードを理解して維持するのが難しくなることです。

+0

AJAXが複数のスレッドを使用しないことは何も価値がありません。 JavaScriptは厳密にシングルスレッド化されています。 –

+0

こんにちはSjoerdとJames: ありがとうございました。はい、同期スレッドは、非同期操作呼び出しよりもはるかに高速にスレッドプールにキューイングされます。このため、大量のトラフィックサイトでデータバインドされた操作を持つほとんどのページでは、非同期操作では何もしないでください。 スレッドプールが決して乾くことのない小さなトラフィックの場合、私は明らかにイントラネットサイトなどの時間を無駄にしています。しかし、 "潜在的に"大きなサイトでは、ルールは非同期操作を行うべきであると考えています。 – Liming

+0

非同期Webフォームは、パフォーマンスの大幅な向上が見込まれる場合にのみ使用してください。ユーザー数、各要求の継続時間、およびサーバー上の実行中のスレッド数を使用して、スレッドが不足するかどうかを判断できます。 – Sjoerd

関連する問題