【问题标题】:MaxConcurrentRequestsPerCPU and Asynchronous RequestsMaxConcurrentRequestsPerCPU 和异步请求
【发布时间】:2011-07-21 02:30:10
【问题描述】:

我正在使用 C# 4.0、ASP.NET MVC 3 和 IIS 7.0。我对 IIS 7 中的异步请求有点困惑。我已经阅读了this 文章和一些论坛/博客文章,但还没有找到答案。这是我的问题,

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

更新:我只是想问一下,切换到 AsyncController 有什么不同吗?

【问题讨论】:

  • 抱歉,我已经更新了我的问题。

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


【解决方案1】:

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

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

如果您需要处理更多,并且已经测试您的服务器可以安全地处理更多,那么请务必调整 IIS 配置以增加限制。设置这样的限制以减少 DOS 攻击等的影响是一个好主意 - 在您实际测试服务器处理负载的能力之外,您应该让 IIS 做这件事并返回“太忙”错误

【讨论】:

  • 谢谢,我很清楚这一点。但我的观点是,如果您是特定于线程的(比如说,maxConcurrentThreadsPerCPU=5000 和 maxConcurrentRequestsPerCPU=0),那么显然使用 AsyncController 将允许您处理超过 5000 个并发请求。但如果您是特定请求(maxConcurrentThreadsPerCPU=0 和 maxConcurrentRequestsPerCPU=5000),则情况并非如此。如果您建议我使用 maxConcurrentThreadsPerCPU 而不是 maxConcurrentRequestsPerCPU。
猜你喜欢
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2014-07-13
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多