答えて
まだ非同期コントローラが必要ですか?
はい。非同期コントローラは、ネットワークコールなどの操作が長く、ワーカースレッドを独占したくない場合に便利です。既定で5000のワーカースレッドがあるということは、それらを浪費しなければならないという意味ではありません。それはあなたがあなたのお金を払っている億万長者なのですか? No.
明らかに非同期コントローラを使用しないと、正常よりも害が大きくなります。
4または5000、それは問題ではなく、単なる設定です。あなたが望むなら、10億に設定することができます。それはあなたのアプリケーションをもっとスケーラビにしません。最後に、マシンには4つのコア(または8または2ではなく、5000)があります。コアの数だけ同時に多くのスレッドを実行できることを常に心に留めておいてください。あなたのコア数を超過したスレッドはオーバーヘッドに過ぎません。より多くのコンテキストスイッチを作成し、CPUを消費し、より多くのメモリを占有します。
IO(データベースアクセス、Webサービス、ファイルアクセス...)はCPUを占有していません。同期的に行うと、操作の長さに応じてスレッドがブロックされます。長時間の操作(5秒間)、1秒あたり1,000リクエストの負荷がある場合は、5,000スレッドを永久にブロックします。あなたは既にスレッドプールを飢えています(5,000の設定で)。しかし、より悪いのは、あなたがコンテキストスイッチを使って機械を捨てることです。非同期に行うと、スレッドはブロックされず、リソースは使用されず、実行可能な並行IOの数に制限はありません。
スレッドプールにスレッドを追加すると、非同期IOを使用してアプリケーションを書き直す余裕がない場合に、素早く汚れたハックが発生します。これはクリーンな解決策ではありません。
>>長時間の操作(5秒間)、1秒間に1,000リクエストの負荷がある場合は、asynchが魔法のようにサイトを実行可能にすることはありません。データアクセスを修正する必要があります。 [1]を参照してください:http://blogs.msdn.com/b/rickandy/archive/2011/07/19/should-my-database-calls-be-asynchronous-part-ii.aspx [2]:http ://blogs.msdn.com/b/rickandy/archive/2009/11/14/should-my-database-calls-be-asynchronous.aspx – RickAndMSFT
MVC 4/Dev11は、非同期コントローラを以前のバージョンよりも魅力的にします。そのWebAPIに追加すると、Webサービスを簡単に作成できます。スタートリーバイスコメントの 彼らはダーリンの答えに少し拡大
(@Darinディミトロフの優れた答えの下)見逃すことはありませんので - 非同期I/O操作( がAsyncControllerが意図されているものである)を使用して動作IOCPではなく、 スレッドプールスレッド。これは重要です。各ThreadPoolスレッドには、関連付けられた1 MBスタック(およびその他のオーバーヘッド)が であるため、 5000 ThreadPoolスレッドを使用している場合、オーバーヘッドのために自動的に5GBのメモリが失われます。 IOCPの継続性には、オーバーヘッドが にはならないので、任意の時間に に多くの番号を入れ替えることができます。 が不要になったときにThreadPoolスレッドがプールされ、削除されます。現在は がアクティブなスレッドに対してのみヒットします。しかし、 ThreadPoolを使用してCPUを同時に処理することが多い場合は、非常に迅速にメモリ問題に遭遇します。 これは、C#/ VBチームが数ヶ月前に Async CTPをリリースした理由の1つです。この問題を解決しようとしています。
Webサービスの非同期は、多くの場合、理にかなって - ウェブサーバ上でブロックされたスレッドの数を減らすために非同期操作を使用してデータベース・アプリケーションのためにShould my database calls be Asynchronous Part II
を参照してくださいすることはほとんど常に完全な時間の無駄です。小規模なWebサーバーは、データベースのバックエンドが同時に処理できるよりも多くのブロッキング要求を容易に処理できます。代わりにShould my database calls be Asynchronous?
- 1. ASP.NET MVCの非同期コントローラ
- 2. ASP.NET MVCの非同期コントローラ
- 3. 意味:「クライアント側の非同期フレームワーク」
- 4. 非同期プログラミングはマルチスレッドを意味しますか?
- 5. Webサービスが非同期であるとはどういう意味ですか?
- 6. WebResponseをまだ非同期に呼び出すMVC非同期コントローラはありますか?
- 7. ASP.NET MVC4非同期コントローラ - なぜ使用するのですか?
- 8. いつASP.NET MVCで非同期コントローラを使用する必要がありますか?
- 9. Web Apiの非同期コントローラ
- 10. この非常に単純な関係は意味がありますか?
- 11. in_arrayは意味がありません
- 12. ASP.NETコントロールの追加と表示は非同期で、同期ではありませんか?
- 13. 正確にNSUrlConnection非同期はどういう意味ですか?
- 14. ASP.Net MVCコントローラの動作方法非同期
- 15. 非同期ASP.Net MVCコントローラのアクションでTask.Run()を実行
- 16. Ruby用の非同期ロギングライブラリはありますか?
- 17. <image>タグの非同期リクエストはありますか?
- 18. 非同期I/OベースのAws Javaクライアントはありますか?
- 19. 非同期メソッドを待つ必要がありますか?
- 20. SOAPはいつRESTより意味がありますか?
- 21. 同じコントローラ内の非同期アクションメソッドと同期アクションメソッド
- 22. Python:サブパッケージをインポートするのは意味がありますか?
- 23. asp:buttonのASP.NET非同期ポストバック
- 24. APIリクエストのreduxサガは意味がありますか?
- 25. SharedPreferencesのキャッシング値は意味がありますか?
- 26. Rails 3スコープのテストは意味がありますか?
- 27. このデザインは意味がありますか?
- 28. メモリバリアはSMPでのみ意味がありますか?
- 29. コントローラの非同期ネットワークコードの構成
- 30. ASP.NET MVC + Backbone.js、これは意味がありますか? ASP.NET MVCは本当に必要ですか?
を参照してくださいしかし、非同期があまりにもオーバーヘッドが
AsyncControllerは新しいスレッドを作成しません。スレッドプールからスレッドを再利用します。 –
もしそれがスレッドプールスレッドを無駄にするなら、どのような利点がありますか? –