.NET Web应用程序本机使用了多少个线程?

Mat*_*att 3 .net c# asp.net iis multithreading

这一直困扰着我.假设我没有使用任何显式形式的任务并行(例如Paralell.ForEach),当我将Web应用程序部署到Windows Server时,本机使用了多少个线程?

换句话说,如果Web服务器具有八核处理器,那么如果我没有明确告诉它使用更多内核,那么应用程序是否只使用其中一个内核?

我敢打赌,我在这里错过了一些简单的东西,所以火上浇油 - 但我还是想知道答案.谢谢.

Eri*_*sch 6

首先,您必须考虑Web服务器本质上是一个多线程系统,因为它必须能够同时响应多个请求(有一些方法可以在单线程环境中执行此操作,但是它效率不高,IIS不支持它.如果两个用户同时访问该站点,则在大多数情况下,两个单独的线程正在为每个请求提供服务.

一旦遇到可伸缩性问题和异步支持,那么一个线程实际上可以为多个请求提供服务(或者更确切地说,可以将请求放在队列中,并且可以重用IIS工作线程来处理其他请求).

所以你从单个用户的角度来看这个.并且该单个用户可能在该Web请求期间仅运行单个活动线程(忽略异步,完成端口等等).也就是说,你可以认为单个Web请求在一般意义上等于单个线程(但是有很多东西可以脱离其他线程,这不是你真正可以依赖的东西).

当您使用Parallel.ForEach之类的东西时,您的单个用户请求现在可以在多个线程中执行操作以提高效率.

IIS网站具有与之关联的工作进程.可以配置和调整该工作进程以控制它使用的线程数.但请记住,您的网站是在IIS的控制下运行的,而不是它自己的应用程序.