我的ASP成绩是reading about AsyncControllers.NET MVC.
似乎它们存在的唯一原因是,IIS线程可以被保存,而长时间运行的工作被委托给常规CLR线程,这似乎更便宜.
我这里有几个问题:
- 为什么这些IIS线程如此昂贵,以至于无法证明为支持异步控制器而构建的整个体系 struct 的合理性?
- 我如何知道/配置我的IIS应用程序池中运行了多少IIS线程?
我的ASP成绩是reading about AsyncControllers.NET MVC.
似乎它们存在的唯一原因是,IIS线程可以被保存,而长时间运行的工作被委托给常规CLR线程,这似乎更便宜.
我这里有几个问题:
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的设置:
Note:本节提供的建议不是规则.它们是一个起点.
您必须对应用程序进行基准测试,以找到最适合您的应用程序的方法.