【问题标题】:Max tasks in TPL?TPL 中的最大任务?
【发布时间】:2011-01-19 20:43:46
【问题描述】:

我想在 Windows Azure 的 Worker 进程中使用 TPL。我希望在队列中添加一个 IJob,它有一个 Run 方法,因此工作人员将包括:

循环 将项目从队列中取出 使用 TPL 调用 IJob.Run,​​这是一个异步调用

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

干杯, 灰烬。

【问题讨论】:

    标签: multithreading azure task-parallel-library plinq worker-process


    【解决方案1】:

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

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

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

    【讨论】:

    • 拥有太大的Tasks 也可能是一个问题,因为它可能会延迟其他Tasks 的处理。因此,使用较大的 Tasks,您可能会获得更好的吞吐量,但延迟会更短。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多