windows C++-计划程序策略

本文介绍并发运行时中计划程序策略的角色。 计划程序策略能控制计划程序在管理任务时使用的策略。 例如,假设一个应用程序需要某些任务在 THREAD_PRIORITY_NORMAL 上执行,而其他任务在 THREAD_PRIORITY_HIGHEST 上执行。 您可以创建两个计划程序实例:一个指定 ContextPriority 策略为 THREAD_PRIORITY_NORMAL,另一个指定同一策略为 THREAD_PRIORITY_HIGHEST。

通过使用计划程序策略,您可以划分可用处理资源并将一组固定的资源分配给每个计划程序。 例如,考虑采用不超过 4 个处理器的并行算法。 可以创建一个计划程序策略,以限制其任务并发使用不超过 4 个处理器。

并发运行时提供默认计划程序。 因此,不必在应用程序中创建计划程序。 由于任务计划程序有助于优化应用程序的性能,如果你刚开始接触并发运行时,建议从使用并行模式库 (PPL) 或异步代理库开始。

当使用 concurrency::CurrentScheduler::Create、concurrency::Scheduler::Create 或 concurrency::Scheduler::SetDefaultSchedulerPolicy 方法创建计划程序实例时,请提供包含指定计划程序行为的键值对集合的 concurrency::SchedulerPolicy 对象。 SchedulerPolicy 构造函数采用可变数量的参数。 第一个参数是要指定的策略元素数。 其余参数是每个策略元素的键值对。 以下示例创建 SchedulerPolicy 对象以指定三个策略元素。 运行时对未指定的策略键使用默认值。

SchedulerPolicy policy(3,       
   MinConcurrency, 2,
   MaxConcurrency, 4,
   ContextPriority, THREAD_PRIORITY_HIGHEST
);

concurrency::PolicyElementKey 枚举定义与任务计划程序关联的策略键。 下表描述了策略键以及运行时针对其中每个键使用的默认值。

每个计划程序在计划任务时使用自己的策略。 与一个计划程序关联的策略不影响任何其他计划程序的行为。 此外,创建 Scheduler 对象后无法更改计划程序策略。

仅使用计划程序策略来控制运行时创建的线程的属性。 不要更改线程关联或运行时创建的线程的优先级,因为这可能会导致未定义的行为。

如果未显式创建计划程序,运行时会为你创建默认计划程序。 如果希望在应用程序中使用默认计划程序,但要为该计划程序指定要使用的策略,请在计划并行工作之前调用 concurrency::Scheduler::SetDefaultSchedulerPolicy 方法。 如果不调用 Scheduler::SetDefaultSchedulerPolicy 方法,运行时将使用表中的默认策略值。

使用 concurrency::CurrentScheduler::GetPolicy 和 concurrency::Scheduler::GetPolicy 方法可检索计划程序策略的副本。 从这些方法收到的策略值可能与创建计划程序时指定的策略值不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值