加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 为什么IIS线程这么珍贵与常规CLR线程相比?

发布时间:2020-12-15 19:11:01 所属栏目:asp.Net 来源:网络整理
导读:我是 reading about AsyncControllers在ASP.NET MVC。 看来,它们存在的唯一原因是,可以保存IIS线程,而长时间运行的工作委托给正常的CLR线程,似乎更便宜。 我在这里有几个问题: 为什么这些IIS线程这么昂贵以证明这个整体架构支持异步控制器? 我如何知道
我是 reading about AsyncControllers在ASP.NET MVC。

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

我在这里有几个问题:

>为什么这些IIS线程这么昂贵以证明这个整体架构支持异步控制器?
>我如何知道/配置在我的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:

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

注意:本节中提供的建议不是规则。他们是一个起点。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读