6

我想在Windows Azure的Worker进程中使用TPL。我期待添加一个IJob队列,这有一个Run方法,所以工作人员将包括:TPL中的最大任务?

环 获取项关闭队列 使用TPL调用IJob.Run,​​这是一个异步调用

但我有点担心我可以添加到TPL的最大物品?我很高兴根据需要建立我自己的TPL Pool,只需检查它的功能。

干杯, 灰。

回答

9

TPL的主要目标之一是消除需要担心这一点。通过将工作分解为任务而不是线程,您可以让调度程序更好地处理这种平衡。

您可以安排的“任务”数量没有固定的上限。它们是(默认情况下,使用默认的TaskScheduler)使用ThreadPool进行调度,它基于.NET 4进行扩展。我强烈建议不要试图建立你自己的游泳池 - 你很可能会做得比默认好。话虽如此,如果你的任务有一个非标准的行为,你可能要考虑编写一个自定义的TaskScheduler。

另外 - 意识到你应该在理想情况下让你的任务“尽可能大”。与单个任务相关的开销 - 如果它们太小(就工作而言),会导致开销对性能产生较大的影响,如果您拥有适当数量的较大“任务”。

+1

“Task”太大也可能是一个问题,因为它可能会延迟其他Task的处理。所以,对于大型的Task,你可能会获得更好的吞吐量,但延迟更差。 – svick 2012-06-19 12:17:04