ISchedulerProxy::RequestInitialVirtualProcessors 方法
请求虚拟处理器根的初始分配。 每个虚拟处理器根表示执行一个可以执行计划程序作业的线程的能力。
virtual IExecutionResource * RequestInitialVirtualProcessors(
bool doSubscribeCurrentThread
) =0;
参数
- doSubscribeCurrentThread
在资源分配期间,是否订阅当前线程和其帐户。
返回值
如果形参 doSubscribeCurrentThread 的值为 true,则为当前线程的 IExecutionResource 接口。 如果值为 false,则方法返回 NULL。
备注
在计划程序执行任何工作之前,它应使用此方法从资源管理器中请求虚拟处理器根。 资源管理器将使用 IScheduler::GetPolicy 访问计划程序策略,并将使用策略密钥 MinConcurrency、MaxConcurrency 和 TargetOversubscriptionFactor 的值来确定将多少硬件线程初始分配给计划程序以及要为每个硬件线程创建多少虚拟处理器根。 有关如何使用计划程序策略来确定计划程序初始分配的更多信息,请参见 PolicyElementKey。
资源管理器通过使用虚拟处理器根列表调用方法 IScheduler::AddVirtualProcessors 向计划程序赋予资源。 在此方法返回之前,调用该方法作为对计划程序的回调。
如果计划程序通过将形参 doSubscribeCurrentThread 设置为 true 来请求当前线程的订阅,该方法将返回 IExecutionResource 接口。 必须稍后通过使用 IExecutionResource::Remove 方法终止订阅。
确定选定了哪些硬件线程时, 资源管理器将尝试为处理器节点关系进行优化。 如果请求当前线程的订阅,那么表示当前线程打算参与分配给此计划程序的工作。 在这种情况下,已分配的虚拟处理器根位于当前线程正在其上执行的处理器节点上(如有可能)。
订阅线程的操作会以 1 增加基础硬件线程的订阅级别。 终止该订阅时,会降低一个订阅级别。 有关订阅级别的详细信息,请参见 IExecutionResource::CurrentSubscriptionLevel。
要求
**标头:**concrtrm.h
命名空间: 并发