Scheduler 클래스Scheduler Class

동시성 런타임 스케줄러에 대한 추상화를 나타냅니다.Represents an abstraction for a Concurrency Runtime scheduler.

구문Syntax

class Scheduler;

멤버Members

Protected 생성자Protected Constructors

NameName 설명Description
SchedulerScheduler 클래스의 개체는 Scheduler 팩터리 메서드를 사용 하거나 암시적 으로만 만들 수 있습니다.An object of the Scheduler class can only created using factory methods, or implicitly.
~ Scheduler 소멸자~Scheduler Destructor 클래스의 개체는 Scheduler 모든 외부 참조가 존재 하지 않는 경우 암시적으로 제거 됩니다.An object of the Scheduler class is implicitly destroyed when all external references to it cease to exist.

Public 메서드Public Methods

이름Name 설명Description
연결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.
만들기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.
GetNumberOfVirtualProcessorsGetNumberOfVirtualProcessors 스케줄러에 대 한 현재 가상 프로세서 수를 반환 합니다.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.
IsAvailableLocationIsAvailableLocation 지정 된 위치를 스케줄러에서 사용할 수 있는지 여부를 확인 합니다.Determines whether a given location is available on the scheduler.
참조Reference 스케줄러 참조 횟수를 증가 시킵니다.Increments the scheduler reference count.
RegisterShutdownEventRegisterShutdownEvent _Event스케줄러를 종료 하 고 자체를 소멸 시킬 때 매개 변수에 전달 된 Windows 이벤트 핸들이 신호를 받도록 합니다.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.
ResetDefaultSchedulerPolicyResetDefaultSchedulerPolicy 기본 스케줄러 정책을 런타임 기본값으로 다시 설정 합니다.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 또는 ResetDefaultSchedulerPolicy 메서드에 대 한 다음 유효한 호출까지 적용 됩니다.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

동시성 런타임 scheduler는 응용 프로그램에서 큐에 대기 중인 작업을 실행 하기 위해 스레드와 같은 운영 체제 실행 컨텍스트에 매핑되는 실행 컨텍스트를 사용 합니다.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 etach 메서드를 호출 해야 합니다.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.

이 스케줄러가 호출 컨텍스트의 현재 scheduler 인 경우이 메서드는 improper_scheduler_attach 예외를 throw 합니다.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_errorinvalid_scheduler_policy_value를 포함 하 여 다양 한 예외를 throw 할 수 있습니다.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.

GetNumberOfVirtualProcessorsGetNumberOfVirtualProcessors

스케줄러에 대 한 현재 가상 프로세서 수를 반환 합니다.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.

A-idId

스케줄러에 대 한 고유 식별자를 반환 합니다.Returns a unique identifier for the scheduler.

virtual unsigned int Id() const = 0;

반환 값Return Value

스케줄러에 대 한 고유 식별자입니다.A unique identifier for the scheduler.

IsAvailableLocationIsAvailableLocation

지정 된 위치를 스케줄러에서 사용할 수 있는지 여부를 확인 합니다.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.

참조일Reference

스케줄러 참조 횟수를 증가 시킵니다.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. 스케줄러의 참조 횟수가 0이 되면 스케줄러가 종료되고 스케줄러의 모든 작업이 완료된 후 자체적으로 소멸합니다.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 0이 고 스케줄러가 소유 하지 않은 컨텍스트에서 호출 되는 경우 improper_scheduler_reference 예외를 throw 합니다.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.

RegisterShutdownEventRegisterShutdownEvent

_Event스케줄러를 종료 하 고 자체를 소멸 시킬 때 매개 변수에 전달 된 Windows 이벤트 핸들이 신호를 받도록 합니다.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. 스케줄러의 참조 횟수가 0이 되면 스케줄러가 종료되고 스케줄러의 모든 작업이 완료된 후 자체적으로 소멸합니다.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.

ResetDefaultSchedulerPolicyResetDefaultSchedulerPolicy

기본 스케줄러 정책을 런타임 기본값으로 다시 설정 합니다.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 모든 외부 참조가 존재 하지 않는 경우 암시적으로 제거 됩니다.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 또는 ResetDefaultSchedulerPolicy 메서드에 대 한 다음 유효한 호출까지 적용 됩니다.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 예외가 throw 됩니다.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

concurrency 네임 스페이스concurrency Namespace
Scheduler 클래스Scheduler Class
PolicyElementKeyPolicyElementKey
작업 SchedulerTask Scheduler