在 IIS 上运行的 ASP.net 页面是否利用多核处理器?

4
我有一个运行脚本的ASP.net页面,根据参数不同,运行时间会在1秒到10分钟之间变化。我的问题是,如果服务器是多核的,这个脚本会自动利用所有处理器吗?还是只限于一个处理器?谢谢任何帮助。

我们是在讨论服务器脚本还是客户端JavaScript? - Brian Mains
服务器端ASP.net(VB.net)脚本 - Tom Gullen
3个回答

3
不,该页面只会在一个核心上运行。
IIS使用多个线程来处理请求,但每个请求一次只使用一个线程。
如果您想让代码利用多个核心,您需要自己启动线程。

2

我相信每个请求默认只会分配一个处理器/线程。您可以通过在代码中创建多个线程来自行优化,以执行您的工作(这样您可能会使用更多的处理器)。

您可以将应用程序池标记为具有更多线程,但这不会为单个请求分配更多线程/处理器,而是允许您一次处理更多的请求(因为请求会平衡分配到线程上)。


0

ASP.NET是多线程的。因此,每个页面请求都使用一个新线程来处理。 如果给定处理器的工作负载需要,新线程将分配到不同的CPU/核心上。 但是,ASP.NET会使用所有核心。因此,您的应用程序永远不会受限于一个CPU。

但真正的问题是:您的目标是什么? 1] 您只是担心长时间运行的操作会挂起ASP.NET吗? 2] 还是您希望减少脚本执行所需的时间?

如果将长时间运行的页面设置为异步,则每个线程将立即返回到ASP.NET线程池中,这极大地提高了站点的性能。这解决了问题1。

阅读并了解并行任务库扩展,以了解如何更有效地使用所有核心来处理长时间运行的任务。大多数任务可以分成子任务并行运行。这解决了问题2。

希望这有所帮助。


谢谢,非常好的答案。我正在考虑减少总执行时间。脚本是一个巨大的循环,有时会递归并评估数十万个状态。您认为我是否应该研究运行多个线程?如果我有两个线程,一个可以从循环的开头开始,另一个可以从中间开始(这是可计算的)。理论上可以将执行速度减半吗? - Tom Gullen
如果您正在循环遍历一个集合,其中集合中的每个项目都独立于其他所有项目,则这肯定是可能的。但我认为并行任务库就是为这种任务而创建的。使用 PTL,您只需执行循环,库会处理将每个循环迭代分割到可用核心上。因此,您不需要使用一个、两个、三个甚至一百个线程。所有操作都会自动完成。 - I_LOVE_MONEY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接