Класс SchedulerScheduler Class

Представляет абстракцию для планировщика среды выполнения с параллелизмом.Represents an abstraction for a Concurrency Runtime scheduler.

СинтаксисSyntax

class Scheduler;

ЧленыMembers

Защищенные конструкторыProtected Constructors

ИмяName ОписаниеDescription
ПланировщикScheduler Объект Scheduler класса может создаваться только с помощью фабричных методов или неявно.An object of the Scheduler class can only created using factory methods, or implicitly.
~ Деструктор планировщика~Scheduler Destructor Объект Scheduler класса неявно уничтожается, когда все внешние ссылки на него прекращают существовать.An object of the Scheduler class is implicitly destroyed when all external references to it cease to exist.

Открытые методыPublic Methods

nameName ОписаниеDescription
AttachAttach Присоединяет планировщик к вызывающему контексту.Attaches the scheduler to the calling context. После возврата из этого метода контекст вызова управляется планировщиком, а планировщик становится текущим планировщиком.After this method returns, the calling context is managed by the scheduler and the scheduler becomes the current scheduler.
СозданиеCreate Создает новый планировщик, поведение которого описывается _Policy параметром, помещает начальную ссылку на планировщик и возвращает указатель на него.Creates a new scheduler whose behavior is described by the _Policy parameter, places an initial reference on the scheduler, and returns a pointer to it.
CreateScheduleGroupCreateScheduleGroup Перегружен.Overloaded. Создает новую группу расписаний в планировщике.Creates a new schedule group within the scheduler. Версия, принимающая параметр, _Placement приводит к смещению задач в созданной группе расписаний к выполнению в расположении, указанном этим параметром.The version that takes the parameter _Placement causes tasks within the newly created schedule group to be biased towards executing at the location specified by that parameter.
жетнумберофвиртуалпроцессорсGetNumberOfVirtualProcessors Возвращает текущее число виртуальных процессоров для планировщика.Returns the current number of virtual processors for the scheduler.
GetPolicyGetPolicy Возвращает копию политики, с которой был создан планировщик.Returns a copy of the policy that the scheduler was created with.
IdId Возвращает уникальный идентификатор для планировщика.Returns a unique identifier for the scheduler.
исаваилаблелокатионIsAvailableLocation Определяет, доступно ли заданное расположение в планировщике.Determines whether a given location is available on the scheduler.
СсылкиReference Увеличивает счетчик ссылок планировщика.Increments the scheduler reference count.
регистершутдовневентRegisterShutdownEvent Приводит к тому, что дескриптор событий Windows, переданный в _Event параметре, получает сигнал о завершении работы планировщика и его уничтожении.Causes the Windows event handle passed in the _Event parameter to be signaled when the scheduler shuts down and destroys itself. В момент получения сигнала о событии все запланированные работы планировщика завершены.At the time the event is signaled, all work that had been scheduled to the scheduler is complete. С помощью этого метода можно зарегистрировать несколько событий завершения работы.Multiple shutdown events can be registered through this method.
РелизRelease Уменьшает значение счетчика ссылок планировщика.Decrements the scheduler reference count.
ресетдефаултсчедулерполициResetDefaultSchedulerPolicy Сбрасывает политику планировщика по умолчанию в среду выполнения по умолчанию.Resets the default scheduler policy to the runtime default. При следующем создании планировщика по умолчанию будут использоваться параметры политики по умолчанию для среды выполнения.The next time a default scheduler is created, it will use the runtime default policy settings.
ScheduleTaskScheduleTask Перегружен.Overloaded. Планирует облегченную задачу в планировщике.Schedules a light-weight task within the scheduler. Упрощенная задача будет размещена в группе расписаний, определенной средой выполнения.The light-weight task will be placed in a schedule group determined by the runtime. Версия, принимающая параметр _Placement, склоняет задачу к выполнению в указанном расположении.The version that takes the parameter _Placement causes the task to be biased towards executing at the specified location.
SetDefaultSchedulerPolicySetDefaultSchedulerPolicy Позволяет использовать определенную пользователем политику для создания планировщика по умолчанию.Allows a user defined policy to be used to create the default scheduler. Этот метод можно вызывать только в том случае, если в процессе не существует планировщика по умолчанию.This method can be called only when no default scheduler exists within the process. После установки политики по умолчанию она остается действующей до следующего допустимого вызова SetDefaultSchedulerPolicy метода или ресетдефаултсчедулерполици .After a default policy has been set, it remains in effect until the next valid call to either the SetDefaultSchedulerPolicy or the ResetDefaultSchedulerPolicy method.

КомментарииRemarks

Планировщик среда выполнения с параллелизмом использует контексты выполнения, которые сопоставляются с контекстами выполнения операционной системы, такими как поток, для выполнения работы, поставленной в очередь приложением.The Concurrency Runtime scheduler uses execution contexts, which map to the operating system execution contexts, such as a thread, to execute the work queued to it by your application. В любое время уровень параллелизма планировщика равен количеству виртуальных процессоров, предоставленных ему диспетчер ресурсов.At any time, the concurrency level of a scheduler is equal to the number of virtual processor granted to it by the Resource Manager. Виртуальный процессор является абстракцией для обрабатывающего ресурса и сопоставляется аппаратному потоку в базовой системе.A virtual processor is an abstraction for a processing resource and maps to a hardware thread on the underlying system. Только один контекст планировщика может выполняться на виртуальном процессоре в определенный момент времени.Only a single scheduler context can execute on a virtual processor at a given time.

Среда выполнения с параллелизмом создаст планировщик по умолчанию для каждого процесса, чтобы выполнить параллельную работу.The Concurrency Runtime will create a default scheduler per process to execute parallel work. Кроме того, вы можете создавать собственные экземпляры планировщика и манипулировать ими с помощью этого класса.In addition you can create your own scheduler instances and manipulate it using this class.

Иерархия наследованияInheritance Hierarchy

Scheduler

ТребованияRequirements

Заголовок: ConcRT. hHeader: concrt.h

Пространство имен: параллелизмNamespace: concurrency

ВновьAttach

Присоединяет планировщик к вызывающему контексту.Attaches the scheduler to the calling context. После возврата из этого метода контекст вызова управляется планировщиком, а планировщик становится текущим планировщиком.After this method returns, the calling context is managed by the scheduler and the scheduler becomes the current scheduler.

virtual void Attach() = 0;

КомментарииRemarks

При присоединении планировщика неявным образом накладывается ссылка на планировщик.Attaching a scheduler implicitly places a reference on the scheduler.

В некоторый момент в будущем необходимо вызвать метод CurrentScheduler::D етач , чтобы разрешить завершение работы планировщика.At some point in the future, you must call the CurrentScheduler::Detach method in order to allow the scheduler to shut down.

Если этот метод вызывается из контекста, уже присоединенного к другому планировщику, существующий планировщик запоминается как предыдущий планировщик, а вновь созданный планировщик становится текущим планировщиком.If this method is called from a context that is already attached to a different scheduler, the existing scheduler is remembered as the previous scheduler, and the newly created scheduler becomes the current scheduler. При CurrentScheduler::Detach последующем вызове метода предыдущий планировщик восстанавливается в качестве текущего планировщика.When you call the CurrentScheduler::Detach method at a later point, the previous scheduler is restored as the current scheduler.

Этот метод вызовет исключение improper_scheduler_attach , если этот планировщик является текущим планировщиком вызывающего контекста.This method will throw an improper_scheduler_attach exception if this scheduler is the current scheduler of the calling context.

СозданиеCreate

Создает новый планировщик, поведение которого описывается _Policy параметром, помещает начальную ссылку на планировщик и возвращает указатель на него.Creates a new scheduler whose behavior is described by the _Policy parameter, places an initial reference on the scheduler, and returns a pointer to it.

static Scheduler* __cdecl Create(const SchedulerPolicy& _Policy);

ПараметрыParameters

_Policy_Policy
Политика планировщика, которая описывает поведение только что созданного планировщика.The scheduler policy that describes behavior of the newly created scheduler.

Возвращаемое значениеReturn Value

Указатель на только что созданный планировщик.A pointer to a newly created scheduler. SchedulerНа этом объекте размещено начальное количество ссылок.This Scheduler object has an initial reference count placed on it.

КомментарииRemarks

После создания планировщика с помощью Create метода необходимо вызвать Release метод в некоторый момент в будущем, чтобы удалить начальное значение счетчика ссылок и разрешить завершение работы планировщика.After a scheduler is created with the Create method, you must call the Release method at some point in the future in order to remove the initial reference count and allow the scheduler to shut down.

Планировщик, созданный с помощью этого метода, не присоединен к вызывающему контексту.A scheduler created with this method is not attached to the calling context. Его можно присоединить к контексту с помощью метода attach .It can be attached to a context using the Attach method.

Этот метод может вызывать различные исключения, в том числе scheduler_resource_allocation_error и invalid_scheduler_policy_value.This method can throw a variety of exceptions, including scheduler_resource_allocation_error and invalid_scheduler_policy_value.

CreateScheduleGroupCreateScheduleGroup

Создает новую группу расписаний в планировщике.Creates a new schedule group within the scheduler. Версия, принимающая параметр, _Placement приводит к смещению задач в созданной группе расписаний к выполнению в расположении, указанном этим параметром.The version that takes the parameter _Placement causes tasks within the newly created schedule group to be biased towards executing at the location specified by that parameter.

virtual ScheduleGroup* CreateScheduleGroup() = 0;

virtual ScheduleGroup* CreateScheduleGroup(location& _Placement) = 0;

ПараметрыParameters

_Placement_Placement
Ссылка на расположение, в котором задачи в группе расписаний будут смещены в сторону выполнения в.A reference to a location where the tasks within the schedule group will biased towards executing at.

Возвращаемое значениеReturn Value

Указатель на только что созданную группу расписаний.A pointer to the newly created schedule group. ScheduleGroupНа этом объекте размещено начальное количество ссылок.This ScheduleGroup object has an initial reference count placed on it.

КомментарииRemarks

При завершении планирования работы для группы расписаний необходимо вызвать метод Release .You must invoke the Release method on a schedule group when you are done scheduling work to it. Планировщик удалит группу расписаний после завершения всей работы в очереди.The scheduler will destroy the schedule group when all work queued to it has completed.

Обратите внимание, что если вы явно создали этот планировщик, необходимо освободить все ссылки на группы планирования в нем, прежде чем отпустить ссылки на планировщик.Note that if you explicitly created this scheduler, you must release all references to schedule groups within it, before you release your references on the scheduler.

жетнумберофвиртуалпроцессорсGetNumberOfVirtualProcessors

Возвращает текущее число виртуальных процессоров для планировщика.Returns the current number of virtual processors for the scheduler.

virtual unsigned int GetNumberOfVirtualProcessors() const = 0;

Возвращаемое значениеReturn Value

Текущее число виртуальных процессоров для планировщика.The current number of virtual processors for the scheduler.

GetPolicyGetPolicy

Возвращает копию политики, с которой был создан планировщик.Returns a copy of the policy that the scheduler was created with.

virtual SchedulerPolicy GetPolicy() const = 0;

Возвращаемое значениеReturn Value

Копия политики, с которой был создан планировщик.A copy of the policy that the scheduler was created with.

УдостоверенияId

Возвращает уникальный идентификатор для планировщика.Returns a unique identifier for the scheduler.

virtual unsigned int Id() const = 0;

Возвращаемое значениеReturn Value

Уникальный идентификатор планировщика.A unique identifier for the scheduler.

исаваилаблелокатионIsAvailableLocation

Определяет, доступно ли заданное расположение в планировщике.Determines whether a given location is available on the scheduler.

virtual bool IsAvailableLocation(const location& _Placement) const = 0;

ПараметрыParameters

_Placement_Placement
Ссылка на расположение для запроса к планировщику.A reference to the location to query the scheduler about.

Возвращаемое значениеReturn Value

Указывает, доступно ли в планировщике расположение, заданное _Placement аргументом.An indication of whether or not the location specified by the _Placement argument is available on the scheduler.

КомментарииRemarks

Обратите внимание, что возвращаемое значение является результатом проверки доступности указанного расположения в данный момент.Note that the return value is an instantaneous sampling of whether the given location is available. При наличии нескольких планировщиков динамическое управление ресурсами может добавлять или забирать ресурсы у планировщиков в любой момент.In the presence of multiple schedulers, dynamic resource management can add or take away resources from schedulers at any point. Если это произошло, доступность заданного расположения может измениться.Should this happen, the given location can change availability.

IsReferenceReference

Увеличивает счетчик ссылок планировщика.Increments the scheduler reference count.

virtual unsigned int Reference() = 0 ;

Возвращаемое значениеReturn Value

Вновь увеличивающееся число ссылок.The newly incremented reference count.

КомментарииRemarks

Обычно это используется для управления временем существования планировщика для композиции.This is typically used to manage the lifetime of the scheduler for composition. Когда значение счетчика ссылок планировщика снижается до нуля, планировщик завершит работу и уничтожится после завершения всей работы, указанной в планировщике.When the reference count of a scheduler falls to zero, the scheduler will shut down and destruct itself after all work on the scheduler has completed.

Метод вызовет исключение improper_scheduler_reference , если число ссылок до вызова Reference метода было равно нулю и вызов выполняется из контекста, который не принадлежит планировщику.The method will throw an improper_scheduler_reference exception if the reference count prior to calling the Reference method was zero and the call is made from a context that is not owned by the scheduler.

регистершутдовневентRegisterShutdownEvent

Приводит к тому, что дескриптор событий Windows, переданный в _Event параметре, получает сигнал о завершении работы планировщика и его уничтожении.Causes the Windows event handle passed in the _Event parameter to be signaled when the scheduler shuts down and destroys itself. В момент получения сигнала о событии все запланированные работы планировщика завершены.At the time the event is signaled, all work that had been scheduled to the scheduler is complete. С помощью этого метода можно зарегистрировать несколько событий завершения работы.Multiple shutdown events can be registered through this method.

virtual void RegisterShutdownEvent(HANDLE _Event) = 0;

ПараметрыParameters

_Event_Event
Дескриптор объекта события Windows, который будет сигнальным средой выполнения при завершении работы планировщика и его уничтожении.A handle to a Windows event object which will be signaled by the runtime when the scheduler shuts down and destroys itself.

ОтпусканииRelease

Уменьшает значение счетчика ссылок планировщика.Decrements the scheduler reference count.

virtual unsigned int Release() = 0;

Возвращаемое значениеReturn Value

Вновь уменьшенное число ссылок.The newly decremented reference count.

КомментарииRemarks

Обычно это используется для управления временем существования планировщика для композиции.This is typically used to manage the lifetime of the scheduler for composition. Когда значение счетчика ссылок планировщика снижается до нуля, планировщик завершит работу и уничтожится после завершения всей работы, указанной в планировщике.When the reference count of a scheduler falls to zero, the scheduler will shut down and destruct itself after all work on the scheduler has completed.

ресетдефаултсчедулерполициResetDefaultSchedulerPolicy

Сбрасывает политику планировщика по умолчанию в среду выполнения по умолчанию.Resets the default scheduler policy to the runtime default. При следующем создании планировщика по умолчанию будут использоваться параметры политики по умолчанию для среды выполнения.The next time a default scheduler is created, it will use the runtime default policy settings.

static void __cdecl ResetDefaultSchedulerPolicy();

КомментарииRemarks

Этот метод может быть вызван, когда в процессе существует планировщик по умолчанию.This method can be called while a default scheduler exists within the process. Он не влияет на политику существующего планировщика по умолчанию.It will not affect the policy of the existing default scheduler. Однако если планировщик по умолчанию был завершен и новое значение по умолчанию было создано позже, то новый планировщик будет использовать параметры политики по умолчанию для среды выполнения.However, if the default scheduler were to shutdown, and a new default were to be created at a later point, the new scheduler would use the runtime default policy settings.

ПланировщикаScheduler

Объект Scheduler класса может создаваться только с помощью фабричных методов или неявно.An object of the Scheduler class can only created using factory methods, or implicitly.

Scheduler();

КомментарииRemarks

Планировщик по умолчанию процесса создается неявно при использовании многих функций среды выполнения, требующих подключения планировщика к вызывающему контексту.The process' default scheduler is created implicitly when you utilize many of the runtime functions which require a scheduler to be attached to the calling context. Методы в CurrentScheduler классе и функции слоев PPL и агентов обычно выполняют неявное вложение.Methods within the CurrentScheduler class and features of the PPL and agents layers typically perform implicit attachment.

Планировщик можно также создать явным образом с помощью CurrentScheduler::Create метода или Scheduler::Create метода.You can also create a scheduler explicitly through either the CurrentScheduler::Create method or the Scheduler::Create method.

~ Scheduler~Scheduler

Объект Scheduler класса неявно уничтожается, когда все внешние ссылки на него прекращают существовать.An object of the Scheduler class is implicitly destroyed when all external references to it cease to exist.

virtual ~Scheduler();

ScheduleTaskScheduleTask

Планирует облегченную задачу в планировщике.Schedules a light-weight task within the scheduler. Упрощенная задача будет размещена в группе расписаний, определенной средой выполнения.The light-weight task will be placed in a schedule group determined by the runtime. Версия, принимающая параметр _Placement, склоняет задачу к выполнению в указанном расположении.The version that takes the parameter _Placement causes the task to be biased towards executing at the specified location.

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data) = 0;

virtual void ScheduleTask(
    TaskProc _Proc,
    _Inout_opt_ void* _Data,
    location& _Placement) = 0;

ПараметрыParameters

_Proc_Proc
Указатель на функцию, которая должна быть выполнена, чтобы выполнить задачу неплотности.A pointer to the function to execute to perform the body of the light-weight task.

_Data_Data
Указатель типа void на данные, которые будут переданы в качестве параметра в текст задачи.A void pointer to the data that will be passed as a parameter to the body of the task.

_Placement_Placement
Ссылка на расположение, где будет склонна выполняться упрощенная задача.A reference to a location where the light-weight task will be biased towards executing at.

SetDefaultSchedulerPolicySetDefaultSchedulerPolicy

Позволяет использовать определенную пользователем политику для создания планировщика по умолчанию.Allows a user defined policy to be used to create the default scheduler. Этот метод можно вызывать только в том случае, если в процессе не существует планировщика по умолчанию.This method can be called only when no default scheduler exists within the process. После установки политики по умолчанию она остается действующей до следующего допустимого вызова SetDefaultSchedulerPolicy метода или ресетдефаултсчедулерполици .After a default policy has been set, it remains in effect until the next valid call to either the SetDefaultSchedulerPolicy or the ResetDefaultSchedulerPolicy method.

static void __cdecl SetDefaultSchedulerPolicy(const SchedulerPolicy& _Policy);

ПараметрыParameters

_Policy_Policy
Политика, которая должна быть задана в качестве политики планировщика по умолчанию.The policy to be set as the default scheduler policy.

КомментарииRemarks

Если SetDefaultSchedulerPolicy метод вызывается, когда в процессе уже существует планировщик по умолчанию, среда выполнения выдаст исключение default_scheduler_exists .If the SetDefaultSchedulerPolicy method is called when a default scheduler already exists within the process, the runtime will throw a default_scheduler_exists exception.

См. также разделSee also

Пространство имен Concurrencyconcurrency Namespace
Класс SchedulerScheduler Class
полициелементкэйPolicyElementKey
Планировщик заданийTask Scheduler