繁体   English   中英

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

[英]How many threads does a .NET web application natively use?

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

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

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

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

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

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

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

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

随着.NET版本的发展,线程主题会变得非常混乱。

但要过度简化,这取决于ASP.NET的processModel配置。 (machine.config) autoConfig = true / false等。

在.NET 4.0中,最小/最大WorkerThreads和最小/最大IOCompletionThreads确定了正在播放的线程数量。

例如,如果minWorkerThreads = 1(默认值),那么整个minThreads = 1 * no:of cores ..与maxWorkerThreads相同。

基于负载,工作进程可以使用未公开的算法来增加服务请求所需的线程.. minWorkerThreads to maxWorkerThreads。 (当然基于ThreadPool线程的可用性等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM