2010-07-08 64 views
3

我有一个运行脚本的ASP.net页面,它需要1秒到10分钟之间的任何时间才能运行,这取决于传递给它的参数。在IIS上运行的ASP.net页面是否使用多核处理器?

我的问题是,如果服务器是多核的,这个脚本会自动使用所有的处理器,还是被限制为一个。

感谢您的任何帮助

+0

我们在说服务器脚本还是客户端JavaScript? – 2010-07-08 11:26:00

+0

服务器端ASP.net(VB.net)脚本 – 2010-07-08 11:27:01

回答

2

不,页面只能在一个核心上运行。

IIS使用多个线程处理请求,但每次请求一次只使用一个线程。

如果您希望代码使用多个内核,您必须自己启动线程。

+0

谢谢! – 2010-07-08 11:38:20

2

我相信每个请求只被分配一个处理器/线程默认情况下。你可以通过在你的代码中创建多个线程来完成你的工作来优化它(这样你可能会使用更多的处理器)。

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

1

ASP.NET是多线程的。 因此,一个新的线程用于处理每个页面请求。 如果将新线程分配给不同的CPU /内核,这一切都取决于给定处理器的工作负载。 但是,您的所有内核都由ASP.NET使用。所以你的应用永远不会局限于一个CPU。

但真正的问题是:你的目标是什么? 1]你只是害怕你的长时间运行的操作将挂起ASP.NET? 2]或者你是否希望减少脚本执行所需的时间?

如果你使你的长时间运行的页面异步,那么每个线程将立即返回到ASP.NET线程池 ,这将大大增加你网站的性能。解决问题1.

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

希望这会有所帮助。

+0

谢谢,很好的答案。我正在考虑缩短总执行时间。该脚本是一个巨大的循环,有时会递归并评估数十万个状态。你认为看看运行多线程会对我有好处吗?如果我有两个线程,一个可以从循环的开始开始,另一个可以从中间开始(这是可计算的)。理论上将执行速度减半? – 2010-07-08 11:51:13

+0

如果你正在循环一个集合,集合中的每个项目都独立于所有其他项目,那么这肯定是可能的。 但我也认为并行任务库是为这种任务创建的。使用PTL,您只需执行循环,并且库处理将可用核心上的每个循环迭代进行分割。 因此,您不需要花费一,二,三,甚至一百个线程。这一切都发生自动神奇。 – 2010-07-08 12:05:54

相关问题