计划组

更新:2010 年 7 月

本文档介绍并发运行时中计划组的作用。 计划组可将相关的任务关联或分组在一起。 每个计划程序都具有一个或多个计划组。 在您需要任务之间的高度位置时可使用计划组,例如,当一组相关的任务受益于在相同的处理器节点上执行操作时。 相反,如果您的应用程序具有特定的质量要求(例如当您想要限制指派给一组任务的处理资源的数量时),请使用计划程序实例。 有关计划程序实例的更多信息,请参见计划程序实例

提示

并发运行时提供默认的计划程序,因此您不需要在应用程序中再创建一个计划程序。 由于任务计划程序可帮助您优化应用程序的性能,因此如果您不熟悉并发运行时,则建议您先使用 并行模式库 (PPL)异步代理库

每个 Scheduler 对象对于每个计划节点都有一个默认计划组。 计划节点映射到基础系统拓扑。 运行时为每个处理器包创建一个计划节点,或创建一个非统一内存体系结构 (NUMA) 节点(数字较大者优先)。 如果您没有将某个任务与计划组显式关联,则计划程序会选择将该任务添加到哪个组。

SchedulingProtocol 计划程序策略会影响计划程序执行每个计划组中的任务的顺序。 如果 SchedulingProtocol 设置为 EnhanceScheduleGroupLocality(这是默认值),则任务计划程序在当前任务完成或协作让出资源时,将从它正在工作的计划组中选择下一个任务。 任务计划程序在移到下一个可用组之前,在当前计划组中搜索工作。 相反,如果 SchedulingProtocol 设置为 EnhanceForwardProgress,则计划程序在每个任务完成或让出资源后移动到下一个计划组。 有关比较这些策略的示例,请参见如何:使用计划组影响执行顺序

运行时使用 Concurrency::ScheduleGroup 类表示计划组。 若要创建 ScheduleGroup 对象,请调用 Concurrency::CurrentScheduler::CreateScheduleGroupConcurrency::Scheduler::CreateScheduleGroup 方法。 运行时像对 Scheduler 对象一样,使用引用计数机制来控制 ScheduleGroup 对象的生存期。 当您创建 ScheduleGroup 对象时,运行时将引用计数器设置为一。 Concurrency::ScheduleGroup::Reference 方法将引用计数器递增一个单位。 Concurrency::ScheduleGroup::Release 方法将引用计数器递减一个单位。

并发运行时中的许多类型都允许您将对象与计划组关联。 例如,Concurrency::agent 类和消息块类(如 Concurrency::unbounded_bufferConcurrency::joinConcurrency::timer)可提供采用 ScheduleGroup 对象的构造函数的重载版本。 运行时使用与此 ScheduleGroup 对象关联的 Scheduler 对象来计划任务。

您还可以使用 Concurrency::ScheduleGroup::ScheduleTask 方法来计划轻量级任务。 有关轻量级任务的更多信息,请参见轻量级任务

示例

有关使用计划组控制任务执行顺序的示例,请参见如何:使用计划组影响执行顺序

请参见

概念

任务计划程序(并发运行时)

其他资源

计划程序实例

如何:使用计划组影响执行顺序

修订记录

日期

修订记录

原因

2010 年 7 月

重新组织了内容。

信息补充。