TPL中的最大任务?

Ash*_*Ash 6 multithreading worker-process azure plinq task-parallel-library

我想在Windows Azure上的Worker进程中使用TPL.我想在队列中添加一个IJob,这有一个Run方法,因此worker将包含:

loop get item off queue使用TPL调用IJob.Run,​​这是一个异步调用

但我有点担心我可以添加到TPL的最大项目?如果需要,我很乐意构建我自己的某种TPL池,只需检查它的功能.

干杯,灰.

Ree*_*sey 11

TPL的主要目标之一是不必担心这一点.通过将您的工作分解为Tasks而不是Threads,您可以让调度程序更适当地处理这种平衡.

您可以安排的"任务"数量没有固定的上限.它们(默认情况下,使用默认的TaskScheduler)使用ThreadPool进行调度,从.NET 4开始,它根据工作进行扩展.我强烈建议不要尝试建立自己的游泳池 - 你做得比默认游戏更有可能.话虽这么说,如果您的任务有非常不标准的行为,您可能需要考虑编写自定义TaskScheduler.

另外 - 要意识到理想情况下应该让你的任务"尽可能大".与单个任务相关的开销 - 使它们太小(就工作而言)将导致开销对性能的影响大于具有适当数量的较大"任务"的影响.

  • 太大的Task可能也是一个问题,因为它可能会延迟其他Task的处理。因此,使用大型`Task`,可能会获得更好的吞吐量,但延迟会更糟。 (2认同)