Scheduler 인스턴스Scheduler Instances

이 문서에서는 동시성 런타임의 스케줄러 인스턴스 역할 및 concurrency:: schedulerConcurrency:: currentscheduler 클래스를 사용 하 여 스케줄러 인스턴스를 만들고 관리 하는 방법에 대해 설명 합니다.This document describes the role of scheduler instances in the Concurrency Runtime and how to use the concurrency::Scheduler and concurrency::CurrentScheduler classes to create and manage scheduler instances. 스케줄러 인스턴스는 명시적 일정 정책에 특정 유형의 작업을 연결 하려는 경우에 유용 합니다.Scheduler instances are useful when you want to associate explicit scheduling policies with specific types of workloads. 예를 들어 높은 스레드 우선 순위로 일부 작업을 실행하기 위한 스케줄러 인스턴스를 하나 만들고, 기본 스케줄러를 사용하여 보통 스레드 우선 순위로 다른 작업을 실행할 수 있습니다.For example, you can create one scheduler instance to run some tasks at an elevated thread priority and use the default scheduler to run other tasks at the normal thread priority.

동시성 런타임은 기본 스케줄러를 제공하므로 애플리케이션에서 스케줄러를 만들 필요가 없습니다.The Concurrency Runtime provides a default scheduler, and therefore you are not required to create one in your application. 작업 스케줄러는 응용 프로그램의 성능을 미세 조정 하는 데 도움이 되므로 동시성 런타임를 처음 접하는 경우 PPL (병렬 패턴 라이브러리) 또는 비동기 에이전트 라이브러리 를 사용 하는 것이 좋습니다.Because the Task Scheduler helps you fine-tune the performance of your applications, we recommend that you start with the Parallel Patterns Library (PPL) or the Asynchronous Agents Library if you are new to the Concurrency Runtime.

섹션Sections

Scheduler 및 CurrentScheduler 클래스The Scheduler and CurrentScheduler Classes

작업 스케줄러를 사용 하면 응용 프로그램에서 하나 이상의 스케줄러 인스턴스 를 사용 하 여 작업을 예약할 수 있습니다.The Task Scheduler enables applications to use one or more scheduler instances to schedule work. Concurrency:: scheduler 클래스는 스케줄러 인스턴스를 나타내며 작업 예약과 관련 된 기능을 캡슐화 합니다.The concurrency::Scheduler class represents a scheduler instance and encapsulates the functionality that is related to scheduling tasks.

스케줄러에 연결 된 스레드를 실행 컨텍스트나 컨텍스트라고 합니다.A thread that is attached to a scheduler is known as an execution context, or just context. 언제 든 지 현재 컨텍스트에서 하나의 스케줄러를 활성화할 수 있습니다.One scheduler can be active on the current context at any time. 활성 스케줄러는 현재 스케줄러라고도 합니다.The active scheduler is also known as the current scheduler. 동시성 런타임 Concurrency:: currentscheduler 클래스를 사용 하 여 현재 스케줄러에 대 한 액세스를 제공 합니다.The Concurrency Runtime uses the concurrency::CurrentScheduler class to provide access to the current scheduler. 한 컨텍스트의 현재 스케줄러는 다른 컨텍스트의 현재 스케줄러와 다를 수 있습니다.The current scheduler for one context can differ from the current scheduler for another context. 런타임에서는 현재 스케줄러의 프로세스 수준 표현을 제공 하지 않습니다.The runtime does not provide a process-level representation of the current scheduler.

일반적으로 CurrentScheduler 클래스를 사용 하 여 현재 스케줄러에 액세스 합니다.Typically, the CurrentScheduler class is used to access the current scheduler. Scheduler 클래스는 현재가 아닌 스케줄러를 관리 해야 하는 경우에 유용 합니다.The Scheduler class is useful when you need to manage a scheduler that is not the current one.

다음 섹션에서는 스케줄러 인스턴스를 만들고 관리 하는 방법을 설명 합니다.The following sections describe how to create and manage a scheduler instance. 이러한 작업을 설명 하는 전체 예제는 방법: 스케줄러 인스턴스 관리를 참조 하세요.For a complete example that illustrates these tasks, see How to: Manage a Scheduler Instance.

[맨 위로 이동][Top]

스케줄러 인스턴스 만들기Creating a Scheduler Instance

다음 세 가지 방법으로 Scheduler 개체를 만들 수 있습니다.There are these three ways to create a Scheduler object:

  • 스케줄러가 없으면 런타임에 병렬 알고리즘과 같은 런타임 기능을 사용 하 여 작업을 수행할 때 기본 스케줄러를 만듭니다.If no scheduler exists, the runtime creates a default scheduler for you when you use runtime functionality, for example, a parallel algorithm, to perform work. 기본 스케줄러는 병렬 작업을 시작 하는 컨텍스트에 대 한 현재 스케줄러가 됩니다.The default scheduler becomes the current scheduler for the context that initiates the parallel work.

  • Concurrency:: CurrentScheduler:: Create 메서드는 특정 정책을 사용 하는 Scheduler 개체를 만들고 해당 스케줄러를 현재 컨텍스트와 연결 합니다.The concurrency::CurrentScheduler::Create method creates a Scheduler object that uses a specific policy and associates that scheduler with the current context.

  • Concurrency:: Scheduler:: Create 메서드는 특정 정책을 사용 하지만 현재 컨텍스트와 연결 하지 않는 Scheduler 개체를 만듭니다.The concurrency::Scheduler::Create method creates a Scheduler object that uses a specific policy, but does not associate it with the current context.

런타임이 기본 스케줄러를 만들도록 허용 하면 모든 동시 태스크가 동일한 스케줄러를 공유할 수 있습니다.Allowing the runtime to create a default scheduler enables all concurrent tasks to share the same scheduler. 일반적으로 PPL ( 병렬 패턴 라이브러리 ) 또는 비동기 에이전트 라이브러리 에서 제공 하는 기능은 병렬 작업을 수행 하는 데 사용 됩니다.Typically, the functionality that is provided by the Parallel Patterns Library (PPL) or the Asynchronous Agents Library is used to perform parallel work. 따라서 해당 정책 또는 수명을 제어 하기 위해 스케줄러와 직접 작업 하지 않아도 됩니다.Therefore, you do not have to work directly with the scheduler to control its policy or lifetime. PPL 또는 에이전트 라이브러리를 사용 하는 경우 런타임에서 기본 스케줄러를 만들어 각 컨텍스트에 대 한 현재 스케줄러로 만듭니다.When you use the PPL or the Agents Library, the runtime creates the default scheduler if it does not exist and makes it the current scheduler for each context. 스케줄러를 만들어 현재 스케줄러로 설정 하면 런타임에서는 해당 스케줄러를 사용 하 여 작업을 예약 합니다.When you create a scheduler and set it as the current scheduler, then the runtime uses that scheduler to schedule tasks. 특정 일정 예약 정책을 필요로 하는 경우에만 추가 스케줄러 인스턴스를 만듭니다.Create additional scheduler instances only when you require a specific scheduling policy. 스케줄러와 연결 된 정책에 대 한 자세한 내용은 Scheduler 정책을 참조 하십시오.For more information about the policies that are associated with a scheduler, see Scheduler Policies.

[맨 위로 이동][Top]

스케줄러 인스턴스의 수명 관리Managing the Lifetime of a Scheduler Instance

런타임은 참조 횟수 메커니즘을 사용 하 여 Scheduler 개체의 수명을 제어 합니다.The runtime uses a reference-counting mechanism to control the lifetime of Scheduler objects.

CurrentScheduler::Create 메서드나 Scheduler::Create 메서드를 사용 하 여 Scheduler 개체를 만드는 경우 런타임은 해당 스케줄러의 초기 참조 횟수를 1로 설정 합니다.When you use the CurrentScheduler::Create method or the Scheduler::Create method to create a Scheduler object, the runtime sets the initial reference count of that scheduler to one. Concurrency:: Scheduler:: Attach 메서드를 호출 하면 런타임에서 참조 횟수를 증가 시킵니다.The runtime increments the reference count when you call the concurrency::Scheduler::Attach method. Scheduler::Attach 메서드는 Scheduler 개체를 현재 컨텍스트와 연결 합니다.The Scheduler::Attach method associates the Scheduler object together with the current context. 이렇게 하면 현재 스케줄러로 설정 됩니다.This makes it the current scheduler. CurrentScheduler::Create 메서드를 호출 하면 런타임에서 Scheduler 개체를 만들어 현재 컨텍스트에 연결 하 고 참조 횟수를 1로 설정 합니다.When you call the CurrentScheduler::Create method, the runtime both creates a Scheduler object and attaches it to the current context (and sets the reference count to one). Concurrency:: Scheduler:: reference 메서드를 사용 하 여 Scheduler 개체의 참조 횟수를 증가 시킬 수도 있습니다.You can also use the concurrency::Scheduler::Reference method to increment the reference count of a Scheduler object.

Concurrency:: CurrentScheduler::D etach 메서드를 호출 하 여 현재 스케줄러를 분리 하거나 Concurrency:: Scheduler:: Release 메서드를 호출 하면 런타임에서 참조 횟수를 감소 시킵니다.The runtime decrements the reference count when you call the concurrency::CurrentScheduler::Detach method to detach the current scheduler, or call the concurrency::Scheduler::Release method. 참조 횟수가 0에 도달 하면 런타임은 모든 예약 된 작업이 완료 된 후 Scheduler 개체를 소멸 시킵니다.When the reference count reaches zero, the runtime destroys the Scheduler object after all scheduled tasks finish. 실행 중인 태스크가 현재 스케줄러의 참조 횟수를 증가 시킬 수 있습니다.A running task is allowed to increment the reference count of the current scheduler. 따라서 참조 횟수가 0에 도달 하 고 태스크가 참조 횟수를 증가 시키는 경우 참조 횟수가 0에 도달 하 고 모든 작업이 완료 될 때까지 런타임에서 Scheduler 개체를 삭제 하지 않습니다.Therefore, if the reference count reaches zero and a task increments the reference count, the runtime does not destroy the Scheduler object until the reference count again reaches zero and all tasks finish.

런타임은 각 컨텍스트에 대 한 Scheduler 개체의 내부 스택을 유지 관리 합니다.The runtime maintains an internal stack of Scheduler objects for each context. Scheduler::Attach 또는 CurrentScheduler::Create 메서드를 호출 하면 런타임에서 현재 컨텍스트의 스택에 해당 Scheduler 개체를 푸시합니다.When you call the Scheduler::Attach or CurrentScheduler::Create method, the runtime pushes that Scheduler object onto the stack for the current context. 이렇게 하면 현재 스케줄러로 설정 됩니다.This makes it the current scheduler. CurrentScheduler::Detach를 호출 하면 런타임에서 현재 컨텍스트의 현재 스케줄러를 팝 하 고 이전 스케줄러를 현재 스케줄러로 설정 합니다.When you call CurrentScheduler::Detach, the runtime pops the current scheduler from the stack for current context and sets the previous one as the current scheduler.

런타임은 스케줄러 인스턴스의 수명을 관리 하는 여러 가지 방법을 제공 합니다.The runtime provides several ways to manage the lifetime of a scheduler instance. 다음 표에서는 스케줄러를 만들거나 현재 컨텍스트에 연결 하는 각 메서드에 대 한 현재 컨텍스트에서 스케줄러를 해제 하거나 분리 하는 적절 한 메서드를 보여 줍니다.The following table shows the appropriate method that releases or detaches the scheduler from the current context for each method that creates or attaches a scheduler to the current context.

만들기 또는 연결 방법Create or attach method Release 또는 detach 메서드Release or detach method
CurrentScheduler::Create CurrentScheduler::Detach
Scheduler::Create Scheduler::Release
Scheduler::Attach CurrentScheduler::Detach
Scheduler::Reference Scheduler::Release

부적절 한 릴리스 또는 분리 메서드를 호출 하면 런타임에서 지정 되지 않은 동작이 생성 됩니다.Calling the inappropriate release or detach method produces unspecified behavior in the runtime.

PPL과 같은 기능을 사용 하 여 런타임에서 기본 스케줄러를 만들도록 하면이 스케줄러를 해제 하거나 분리 하지 마십시오.When you use functionality, for example, the PPL, that causes the runtime to create the default scheduler for you, do not release or detach this scheduler. 런타임은 만들어진 모든 스케줄러의 수명을 관리 합니다.The runtime manages the lifetime of any scheduler that it creates.

런타임은 모든 작업이 완료 되기 전에 Scheduler 개체를 소멸 시 키 지 않으므로 concurrency:: Scheduler:: RegisterShutdownEvent 메서드 또는 Concurrency:: Currentscheduler:: RegisterShutdownEvent 메서드를 사용 하 여 Scheduler 개체가 제거 될 때 알림을 받을 수 있습니다.Because the runtime does not destroy a Scheduler object before all tasks have finished, you can use the concurrency::Scheduler::RegisterShutdownEvent method or the concurrency::CurrentScheduler::RegisterShutdownEvent method to receive a notification when a Scheduler object is destroyed. 이는 Scheduler 개체에 예약 된 모든 작업이 완료 될 때까지 기다려야 하는 경우에 유용 합니다.This is useful when you must wait for every task that is scheduled by a Scheduler object to finish.

[맨 위로 이동][Top]

메서드 및 기능Methods and Features

이 섹션에서는 CurrentSchedulerScheduler 클래스의 중요 한 메서드를 요약 합니다.This section summarizes the important methods of the CurrentScheduler and Scheduler classes.

CurrentScheduler 클래스는 현재 컨텍스트에서 사용할 스케줄러를 만들기 위한 도우미로 생각 하면 됩니다.Think of the CurrentScheduler class as a helper for creating a scheduler for use on the current context. Scheduler 클래스를 사용 하면 다른 컨텍스트에 속한 스케줄러를 제어할 수 있습니다.The Scheduler class lets you control a scheduler that belongs to another context.

다음 표에서는 CurrentScheduler 클래스에 의해 정의 되는 중요 한 메서드를 보여 줍니다.The following table shows the important methods that are defined by the CurrentScheduler class.

방법Method DescriptionDescription
만들기Create 지정 된 정책을 사용 하 여 현재 컨텍스트와 연결 하는 Scheduler 개체를 만듭니다.Creates a Scheduler object that uses the specified policy and associates it with the current context.
GetGet 현재 컨텍스트와 연결 된 Scheduler 개체에 대 한 포인터를 검색 합니다.Retrieves a pointer to the Scheduler object that is associated with the current context. 이 메서드는 Scheduler 개체의 참조 횟수를 증가 시 지 않습니다.This method does not increment the reference count of the Scheduler object.
분리Detach 현재 컨텍스트에서 현재 스케줄러를 분리 하 고 이전 스케줄러를 현재 스케줄러로 설정 합니다.Detaches the current scheduler from the current context and sets the previous one as the current scheduler.
RegisterShutdownEventRegisterShutdownEvent 현재 스케줄러가 제거 될 때 런타임에서 설정 하는 이벤트를 등록 합니다.Registers an event that the runtime sets when the current scheduler is destroyed.
CreateScheduleGroupCreateScheduleGroup 현재 스케줄러에 concurrency:: ScheduleGroup 개체를 만듭니다.Creates a concurrency::ScheduleGroup object in the current scheduler.
ScheduleTaskScheduleTask 현재 스케줄러의 일정 큐에 간단한 작업을 추가 합니다.Adds a lightweight task to the scheduling queue of the current scheduler.
GetPolicyGetPolicy 현재 스케줄러에 연결 된 정책의 복사본을 검색 합니다.Retrieves a copy of the policy that is associated with the current scheduler.

다음 표에서는 Scheduler 클래스에 의해 정의 되는 중요 한 메서드를 보여 줍니다.The following table shows the important methods that are defined by the Scheduler class.

방법Method DescriptionDescription
만들기Create 지정 된 정책을 사용 하는 Scheduler 개체를 만듭니다.Creates a Scheduler object that uses the specified policy.
연결Attach 현재 컨텍스트와 함께 Scheduler 개체를 연결 합니다.Associates the Scheduler object together with the current context.
참조Reference Scheduler 개체의 참조 카운터를 증가 시킵니다.Increments the reference counter of the Scheduler object.
릴리스Release Scheduler 개체의 참조 카운터를 감소 시킵니다.Decrements the reference counter of the Scheduler object.
RegisterShutdownEventRegisterShutdownEvent Scheduler 개체가 제거 될 때 런타임에서 설정 하는 이벤트를 등록 합니다.Registers an event that the runtime sets when the Scheduler object is destroyed.
CreateScheduleGroupCreateScheduleGroup Scheduler 개체에 concurrency:: ScheduleGroup 개체를 만듭니다.Creates a concurrency::ScheduleGroup object in the Scheduler object.
ScheduleTaskScheduleTask Scheduler 개체에서 간단한 작업을 예약 합니다.Schedules a lightweight task from the Scheduler object.
GetPolicyGetPolicy Scheduler 개체와 연결 된 정책의 복사본을 검색 합니다.Retrieves a copy of the policy that is associated with the Scheduler object.
SetDefaultSchedulerPolicySetDefaultSchedulerPolicy 런타임에 기본 스케줄러를 만들 때 사용할 정책을 설정 합니다.Sets the policy for the runtime to use when it creates the default scheduler.
ResetDefaultSchedulerPolicyResetDefaultSchedulerPolicy SetDefaultSchedulerPolicy를 호출 하기 전에 활성화 된 정책에 대 한 기본 정책을 복원 합니다.Restores the default policy to the one that was active before the call to SetDefaultSchedulerPolicy. 이 호출 후 기본 스케줄러를 만든 경우 런타임은 기본 정책 설정을 사용 하 여 스케줄러를 만듭니다.If the default scheduler is created after this call, the runtime uses default policy settings to create the scheduler.

[맨 위로 이동][Top]

예제Example

스케줄러 인스턴스를 만들고 관리 하는 방법에 대 한 기본 예제 는 방법: 스케줄러 인스턴스 관리를 참조 하세요.For basic examples of how to create and manage a scheduler instance, see How to: Manage a Scheduler Instance.

참고 항목See also

작업 스케줄러Task Scheduler
방법: 스케줄러 인스턴스 관리How to: Manage a Scheduler Instance
스케줄러 정책Scheduler Policies
일정 그룹Schedule Groups