【发布时间】:2014-04-04 23:26:56
【问题描述】:
这已经困扰我一段时间了。假设我没有使用任何显式形式的任务并行性(例如Paralell.ForEach),当我将 Web 应用程序部署到 Windows Server 时,本机使用了多少线程?
换句话说,如果网络服务器有一个八核处理器,如果我没有明确告诉它使用更多,应用程序是否只使用其中一个?
我敢打赌,我在这里错过了一些简单的事情,所以加油——但我仍然想知道答案。谢谢。
【问题讨论】:
-
这取决于 ASP.NET 应用程序的类型。我们需要有关已部署应用程序的更多详细信息。
-
假设一个 ASP.NET MVC 应用程序具有几个 WebAPI 端点,每个端点都指向业务逻辑层中的一个方法。 BLL 可能会引用一个实体类并运行您的典型查询和 cruds。这有帮助吗?谢谢!
-
@MatthewPatrickCashatt 托管在什么容器中? IIS?如果是这样,IIS 是一个功能齐全的 Web 服务器,将使用所有可用的内核。
-
是的,IIS。我认为您的问题反映了我没有得到的部分:如果 IIS 足够智能以使用所有内核,那么我为什么需要明确使用
Parallel.ForEach之类的东西?谢谢! -
@MatthewPatrickCashatt,IIS 将确保您的每个请求都将有效地分布在线程/内核之间。但是,单个请求在单个线程上运行。例如,如果为了满足一个请求,您需要在五个不同的服务器上调用五个单独的外部 REST API,那么按顺序执行此操作将是愚蠢的。使用线程将允许您并行化这五个任务,从而使总时间最小化。事实上,通常在请求线程上完成所有工作(通过
await等)就足够了。但有时您需要优化。
标签: c# asp.net .net multithreading iis