我的ASP成绩是reading about AsyncControllers.NET MVC.

似乎它们存在的唯一原因是,IIS线程可以被保存,而长时间运行的工作被委托给常规CLR线程,这似乎更便宜.

我这里有几个问题:

  • 为什么这些IIS线程如此昂贵,以至于无法证明为支持异步控制器而构建的整个体系 struct 的合理性?
  • 我如何知道/配置我的IIS应用程序池中运行了多少IIS线程?

推荐答案

ASP.NET通过使用来自的线程来处理请求.NET线程池.线程池维护已经产生线程初始化成本的线程池.因此,这些线程很容易重用.这个NET线程池也是自调整的.它监控CPU和其他资源利用率,并根据需要添加新线程或修剪线程池大小.通常应该避免手动创建线程来执行工作.相反,使用线程池中的线程.同时,重要的是确保应用程序不会执行冗长的阻塞操作,这可能会迅速导致线程池不足和HTTP请求被拒绝.

磁盘I/O、web服务调用都被阻塞.通过使用异步调用可以实现最佳优化.当您进行异步调用时,asp.net释放线程,当调用回调函数时,请求将被分配给另一个线程.

要配置可以设置的线程数,请执行以下操作:

<system.web>
    <applicationPool maxConcurrentRequestsPerCPU="50" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
</system.web>

参考:ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0

以下是Microsoft best practices recommend的设置:

  • Set maxconnection to 12 * # of CPUs.此设置控制可从客户端启动的最大传出HTTP连接数.在本例中,ASP.NET是客户端.将maxconnection设置为CPU的12*#.
  • Set maxIoThreads to 100美元.此设置控制.NET线程池中的最大I/O线程数.此数字会自动乘以可用CPU的数量.将maxloThread设置为Set maxIoThreads to 100.
  • Set maxWorkerThreads to 100美元.此设置控制线程池中的最大工作线程数.然后,该数字会自动乘以可用CPU的数量.将maxWorkerThread设置为Set maxWorkerThreads to 100.
  • Set minFreeThreads to 88 * # of CPUs美元.如果线程池中的可用线程数低于此设置的值,辅助进程将使用此设置将所有传入请求排队.此设置有效地将可以并发运行的请求数限制为maxWorkerThreadsminFreeThread.将minFreeThread设置为88*#个CPU.这将并发请求的数量限制为12(假设maxWorkerThreads值为Set minFreeThreads to 88 * # of CPUs).
  • Set minLocalRequestFreeThreads to 76 * # of CPUs.如果线程池中的可用线程数低于此数,工作进程将使用此设置对本地主机(Web应用程序将请求发送到本地Web服务)的请求进行排队.此设置类似于minFreeThreads,但仅适用于来自本地计算机的本地主机请求.将minLocalRequestFreeThreads设置为76*.

Note:本节提供的建议不是规则.它们是一个起点.

您必须对应用程序进行基准测试,以找到最适合您的应用程序的方法.

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

使用 aspnet core SignalR 客户端为 VSIX 项目.

属性包含破折号的 ServiceStack 请求对象?

如何在 ASP.Net Core 中验证上传的文件

如何在运行时判断动态数据类型的类型?

Window.Open 使用 PDF 流而不是 PDF 位置

解析器错误消息:无法加载类型sometype

对布尔查询字符串参数使用true或1

System.Web.HttpContext 无法识别

问题映射 HttpHandler --> HTTP Error 404 Not Found

无法确定条件表达式的类型,因为 'string' 和 'System.DBNull' 之间没有隐式转换

ASP.NET 中的 <% %>(嵌入式代码块)

ASP.NET 日期时间 Select 器

与 Twitter Bootstrap Bundle 的 ASP.NET MVC4

如何使用 ASP.NET 和 jQuery 返回 JSON

由于文件路径太长,网站发布失败

会话存储在客户端还是服务器端

使用 jQuery 从 asp:RadioButtonList 读取选定的值

如何将 DataTable 转换为类 Object?

Session.Clear() 与 Session.RemoveAll()