代码之家  ›  专栏  ›  技术社区  ›  Lasse V. Karlsen

任务并行库如何在终端服务器或Web应用程序中扩展?

  •  2
  • Lasse V. Karlsen  · 技术社区  · 15 年前

    我知道,当我执行类似parallel.for和类似的构造时,TPL使用工作窃取队列来完成其任务。

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

    但是,在终端服务器或Web应用程序中,这种规模如何(假设我们在将在Web应用程序中运行的代码中使用tpl)?仅仅因为我们的应用程序有n个实例并行运行,我们是否可以冒险让CPU充满任务?

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ade Miller    15 年前

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

    这将在Parallel Extensions团队博客中讨论:

    Using Parallel Extensions for .NET 4 in ASP.NET apps

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