Scheduler 정책Scheduler Policies

이 문서에서는 동시성 런타임의 스케줄러 정책 역할에 대해 설명 합니다.This document describes the role of scheduler policies in the Concurrency Runtime. Scheduler 정책은 스케줄러에서 작업을 관리 하는 데 사용 하는 전략을 제어 합니다.A scheduler policy controls the strategy that the scheduler uses when it manages tasks. 예를 들어, 일부 작업은 THREAD_PRIORITY_NORMAL에서 실행해야 하고 다른 작업은 THREAD_PRIORITY_HIGHEST에서 실행해야 하는 애플리케이션을 고려해 보겠습니다.For example, consider an application that requires some tasks to execute at THREAD_PRIORITY_NORMAL and other tasks to execute at THREAD_PRIORITY_HIGHEST. 두 가지 스케줄러 인스턴스를 만들 수 있으며, 하나는 ContextPriority 정책을 THREAD_PRIORITY_NORMAL로 지정하고, 다른 하나는 동일한 정책을 THREAD_PRIORITY_HIGHEST로 지정합니다.You can create two scheduler instances: one that specifies the ContextPriority policy to be THREAD_PRIORITY_NORMAL and another that specifies the same policy to be THREAD_PRIORITY_HIGHEST.

스케줄러 정책을 사용하면 사용 가능한 처리 리소스를 나누고 고정된 리소스 집합을 각 스케줄러에 할당할 수 있습니다.By using scheduler policies, you can divide the available processing resources and assign a fixed set of resources to each scheduler. 예를 들어 4 개의 프로세서 이상으로 확장 되지 않는 병렬 알고리즘을 고려 합니다.For example, consider a parallel algorithm that does not scale beyond four processors. 4 개 이하의 프로세서를 동시에 사용 하도록 제한 하는 스케줄러 정책을 만들 수 있습니다.You can create a scheduler policy that limits its tasks to use no more than four processors concurrently.

동시성 런타임에서는 기본 스케줄러를 제공합니다.The Concurrency Runtime provides a default scheduler. 따라서 애플리케이션에서 만들 필요가 없습니다.Therefore, you don't have 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.

Concurrency:: CurrentScheduler:: create, Concurrency:: Scheduler:: create또는 concurrency:: scheduler:: SetDefaultSchedulerPolicy 메서드를 사용 하 여 스케줄러 인스턴스를 만드는 경우 scheduler의 동작을 지정 하는 키-값 쌍의 컬렉션을 포함 하는 concurrency:: SchedulerPolicy 개체를 제공 합니다.When you use the concurrency::CurrentScheduler::Create, concurrency::Scheduler::Create, or concurrency::Scheduler::SetDefaultSchedulerPolicy method to create a scheduler instance, you provide a concurrency::SchedulerPolicy object that contains a collection of key-value pairs that specify the behavior of the scheduler. 생성자는 다양 SchedulerPolicy 한 수의 인수를 사용 합니다.The SchedulerPolicy constructor takes a variable number of arguments. 첫 번째 인수는 지정 하려는 정책 요소의 수입니다.The first argument is the number of policy elements that you are about to specify. 나머지 인수는 각 정책 요소에 대 한 키-값 쌍입니다.The remaining arguments are key-value pairs for each policy element. 다음 예제에서는 SchedulerPolicy 3 개의 정책 요소를 지정 하는 개체를 만듭니다.The following example creates a SchedulerPolicy object that specifies three policy elements. 런타임에서는 지정되지 않은 정책 키에 대해 기본값을 사용합니다.The runtime uses default values for the policy keys that are not specified.

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

Concurrency::P olicyelementkey 열거형은 작업 스케줄러와 연결 된 정책 키를 정의 합니다.The concurrency::PolicyElementKey enumeration defines the policy keys that are associated with the Task Scheduler. 다음 표에서는 런타임에서 각각에 대해 사용 하는 정책 키와 기본값에 대해 설명 합니다.The following table describes the policy keys and the default value that the runtime uses for each of them.

정책 키Policy Key DescriptionDescription 기본값Default Value
SchedulerKind 작업을 예약 하는 데 사용할 스레드 형식을 지정 하는 concurrency:: SchedulerType 값입니다.A concurrency::SchedulerType value that specifies the type of threads to use to schedule tasks. ThreadScheduler(일반 스레드 사용)ThreadScheduler (use normal threads). 이 키에 유효한 유일한 값입니다.This is the only valid value for this key.
MaxConcurrency unsigned int 스케줄러에서 사용 하는 최대 동시성 리소스 수를 지정 하는 값입니다.An unsigned int value that specifies the maximum number of concurrency resources that the scheduler uses. concurrency::MaxExecutionResourcesconcurrency::MaxExecutionResources
MinConcurrency unsigned int 스케줄러에서 사용 하는 최소 동시성 리소스 수를 지정 하는 값입니다.An unsigned int value that specifies the minimum number of concurrency resources that the scheduler uses. 1
TargetOversubscriptionFactor unsigned int 각 처리 리소스에 할당할 스레드 수를 지정 하는 값입니다.An unsigned int value that specifies how many threads to allocate to each processing resource. 1
LocalContextCacheSize unsigned int 각 가상 프로세서의 로컬 큐에 캐시할 수 있는 최대 컨텍스트 수를 지정 하는 값입니다.An unsigned int value that specifies the maximum number of contexts that can be cached in the local queue of each virtual processor. 8
ContextStackSize unsigned int 각 컨텍스트에 대해 예약할 스택 크기 (kb)를 지정 하는 값입니다.An unsigned int value that specifies the size of the stack, in kilobytes, to reserve for each context. 0 (기본 스택 크기 사용)0 (use the default stack size)
ContextPriority int 각 컨텍스트의 스레드 우선 순위를 지정 하는 값입니다.An int value that specifies the thread priority of each context. Setthreadpriority 또는에 전달할 수 있는 모든 값일 수 있습니다 INHERIT_THREAD_PRIORITY .This can be any value that you can pass to SetThreadPriority or INHERIT_THREAD_PRIORITY. THREAD_PRIORITY_NORMAL
SchedulingProtocol 사용할 예약 알고리즘을 지정 하는 concurrency:: SchedulingProtocolType 값입니다.A concurrency::SchedulingProtocolType value that specifies the scheduling algorithm to use. EnhanceScheduleGroupLocality
DynamicProgressFeedback 동시성:D: 통계 기반 진행률 정보에 따라 리소스의 균형을 ynamicprogressfeedbacktype 여부를 지정 하는 값입니다.A concurrency::DynamicProgressFeedbackType value that specifies whether to rebalance resources according to statistics-based progress information.

참고 ProgressFeedbackDisabled 런타임에서 사용 하기 위해 예약 되어 있으므로이 정책을로 설정 하지 마세요.Note Do not set this policy to ProgressFeedbackDisabled because it is reserved for use by the runtime.
ProgressFeedbackEnabled

각 스케줄러는 작업을 예약할 때 자체 정책을 사용 합니다.Each scheduler uses its own policy when it schedules tasks. 한 스케줄러와 연결된 정책은 다른 스케줄러의 동작에 영향을 주지 않습니다.The policies that are associated with one scheduler do not affect the behavior of any other scheduler. 또한 개체를 만든 후에는 스케줄러 정책을 변경할 수 없습니다 Scheduler .In addition, you cannot change the scheduler policy after you create the Scheduler object.

중요

스케줄러 정책만 사용 하 여 런타임에서 만드는 스레드의 특성을 제어 합니다.Use only scheduler policies to control the attributes for threads that the runtime creates. 정의되지 않은 동작이 발생할 수 있기 때문에 런타임에서 생성된 스레드의 스레드 선호도 또는 우선 순위를 변경하지 마십시오.Do not change the thread affinity or priority of threads that are created by the runtime because that might cause undefined behavior.

명시적으로 만들지 않은 경우 런타임에서 기본 스케줄러를 만듭니다.The runtime creates a default scheduler for you if you do not explicitly create one. 응용 프로그램에서 기본 스케줄러를 사용 하려고 하지만 해당 스케줄러에서 사용할 정책을 지정 하려는 경우 병렬 작업을 예약 하기 전에 concurrency:: scheduler:: SetDefaultSchedulerPolicy 메서드를 호출 합니다.If you want to use the default scheduler in your application, but you want to specify a policy for that scheduler to use, call the concurrency::Scheduler::SetDefaultSchedulerPolicy method before you schedule parallel work. 메서드를 호출 하지 않으면 Scheduler::SetDefaultSchedulerPolicy 런타임에서는 테이블의 기본 정책 값을 사용 합니다.If you do not call the Scheduler::SetDefaultSchedulerPolicy method, the runtime uses the default policy values from the table.

Concurrency: : CurrentScheduler:: getpolicyConcurrency:: Scheduler:: getpolicy 메서드를 사용 하 여 스케줄러 정책의 복사본을 검색 합니다.Use the concurrency::CurrentScheduler::GetPolicy and the concurrency::Scheduler::GetPolicy methods to retrieve a copy of the scheduler policy. 이러한 메서드에서 받는 정책 값은 스케줄러를 만들 때 지정 하는 정책 값과 다를 수 있습니다.The policy values that you receive from these methods can differ from the policy values that you specify when you create the scheduler.

예제Example

특정 스케줄러 정책을 사용 하 여 scheduler의 동작을 제어 하는 예제를 확인 하려면 방법: 특정 스케줄러 정책 지정방법: 특정 스케줄러 정책을 사용 하는 에이전트 만들기를 참조 하세요.To examine examples that use specific scheduler policies to control the behavior of the scheduler, see How to: Specify Specific Scheduler Policies and How to: Create Agents that Use Specific Scheduler Policies.

참고 항목See also

작업 SchedulerTask Scheduler
방법: 특정 스케줄러 정책 지정How to: Specify Specific Scheduler Policies
방법: 특정 스케줄러 정책을 사용 하는 에이전트 만들기How to: Create Agents that Use Specific Scheduler Policies