MaxConcurrentRequestsPerCPU和异步请求

时间:2011-07-21 02:30:10

标签: asp.net asp.net-mvc multithreading iis iis-7

我正在使用C#4.0,ASP.NET MVC 3和IIS 7.0。我对IIS 7中的异步请求感到困惑。我已阅读this文章和几篇论坛/博客文章,但尚未找到答案。这是我的问题,

我有一个调用许多远程服务的应用程序。他们中的许多人反应非常缓慢。因此使用AsyncController将释放我的应用程序线程。但在上面的文章中,Thomas说IIS 7使用每CPU最大并发请求数而不是每CPU最大并发线程数。所以我认为使用AsyncController释放线程不会影响整体应用程序的稳定性,因为我们现在请求特定而不是特定于线程。因此,如果我有6000个并发请求,使用AsyncController将只允许5000个请求同时执行。

更新:我只是想问一下,切换到AsyncController是否会有所不同?

1 个答案:

答案 0 :(得分:2)

是的,异步操作将更好地利用CPU /内存资源来处理网络绑定的长时间运行任务。毕竟,这是将此功能添加到MVC的确切原因。它们可以避免每个请求的1个线程长时间被绑定。线程在CPU和CPU方面相对昂贵。内存资源创建&保持。

当然,IIS默认配置为一次只允许处理5000个异步请求(每个CPU),但您链接的博客非常清楚,这只是他们选择的任意数字“因为它很大”< / p>

如果您需要处理更多并且测试过您的服务器可以安全地处理更多,那么请务必调整IIS配置以增加限制。最好有这样一个限制来减少DOS攻击的影响等 - 超出你实际测试服务器处理负载能力的程度,你应该让IIS做到这一点并返回“忙“错误