2

我知道当我执行诸如 Parallel.For 和类似构造之类的事情时,TPL 对其任务使用了工作窃取队列。

如果我理解正确,该构造将启动许多任务,每个任务都将开始处理项目。如果其中一项任务完成了分配的项目,它将开始从尚未完成的其他任务中窃取项目。这解决了项目 1-100 处理成本低而项目 101-200 成本高的问题,并且这两个任务中的一个将闲置直到另一个完成。(我知道这是一个简化的解释。)

但是,这将如何在终端服务器或 Web 应用程序中扩展(假设我们在将在 Web 应用程序中运行的代码中使用 TPL)?我们是否可以仅仅因为我们的应用程序的 N 个实例并排运行而冒着使 CPU 饱和的风险?

我应该阅读有关此主题的任何信息吗?我还没有找到任何特别的东西,但这并不意味着没有。

4

1 回答 1

1

您可以使用 TPL 通过迁移到异步模型来改进 I/O 绑定操作。您还可以通过在低负载情况下更多地利用 Web 服务器上可用的未使用处理器容量来改善请求延迟。您需要仔细考虑这一点,因为在处理器已经 100% 使用的高负载下,增加更多并行性会降低服务器的吞吐量。

这在 Parallel Extensions 团队博客上进行了讨论:

在 ASP.NET 应用程序中使用 .NET 4 的并行扩展

我怀疑同样的论点也适用于终端服务器应用程序。

于 2010-05-07T15:23:03.050 回答