다음을 통해 공유


스케줄러 정책

업데이트: 2010년 7월

이 문서에서는 동시성 런타임에서 스케줄러 정책의 역할에 대해 설명합니다. 스케줄러 정책은 스케줄러에서 작업을 관리할 때 사용하는 전략을 제어합니다. 예를 들어 일부 작업에서는 UMS(사용자 모드 예약 가능) 스레드를 사용하고 다른 작업에서는 일반 스레딩 메커니즘을 사용해야 하는 응용 프로그램을 가정해 봅니다. 두 가지 스케줄러 인스턴스를 만들 수 있습니다. 하나는 UMS 스레드를 스케줄러 정책의 일부로 지정하고 다른 하나는 일반 스레드를 스케줄러 정책의 일부로 지정하는 스케줄러 인스턴스입니다. UMS에 대한 자세한 내용은 사용자 모드 예약을 참조하십시오.

스케줄러 정책을 사용하면 사용 가능한 처리 리소스를 나누고 고정된 리소스 집합을 각 스케줄러에 할당할 수 있습니다. 예를 들어 프로세서를 최대 네 개로 확장하는 병렬 알고리즘을 가정해 봅니다. 작업에서 최대 네 개의 프로세서를 동시에 사용하도록 제한하는 스케줄러 정책을 만들 수 있습니다.

동시성 런타임에서 기본 스케줄러를 제공하므로 응용 프로그램에서 스케줄러를 만들 필요가 없습니다. 작업 스케줄러를 사용하면 응용 프로그램의 성능을 세부적으로 조정할 수 있으므로 동시성 런타임을 처음 사용하는 경우 PPL(병렬 패턴 라이브러리) 또는 비동기 에이전트 라이브러리에서 시작하는 것이 좋습니다.

Concurrency::CurrentScheduler::Create, Concurrency::Scheduler::Create 또는 Concurrency::Scheduler::SetDefaultSchedulerPolicy 메서드를 사용하여 스케줄러 인스턴스를 만드는 경우 스케줄러의 동작을 지정하는 키-값 쌍 컬렉션이 들어 있는 Concurrency::SchedulerPolicy 개체를 제공합니다. SchedulerPolicy 생성자는 다양한 수의 인수를 사용합니다. 첫 번째 인수는 지정할 정책 요소의 수입니다. 나머지 인수는 각 정책 요소의 키/값 쌍입니다. 다음 예제에서는 세 개의 정책 요소를 지정하는 SchedulerPolicy 개체를 만듭니다. 런타임에서는 지정되지 않은 정책 키의 기본값을 사용합니다.

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

Concurrency::PolicyElementKey 열거형은 작업 스케줄러와 연결된 정책 키를 정의합니다. 다음 표에서는 정책 키 및 런타임에서 각 정책 키에 사용하는 기본값에 대해 설명합니다.

정책 키

설명

기본값

SchedulerKind

작업을 예약할 때 일반 스레드를 사용할지 아니면 UMS 스레드를 사용할지를 지정하는 Concurrency::SchedulerType 값입니다.

ThreadScheduler(정상적인 스레드 사용)

MaxConcurrency

스케줄러에서 사용하는 최대 동시성 리소스 수를 지정하는 unsigned int 값입니다.

Concurrency::MaxExecutionResources

MinConcurrency

스케줄러에서 사용하는 최소 동시성 리소스 수를 지정하는 unsigned int 값입니다.

1

TargetOversubscriptionFactor

각 처리 리소스에 할당할 스레드의 수를 지정하는 unsigned int 값입니다.

1

LocalContextCacheSize

각 가상 프로세서의 로컬 큐에 캐시할 수 있는 최대 컨텍스트 수를 지정하는 unsigned int 값입니다.

8

ContextStackSize

각 컨텍스트에 대해 예약할 스택 크기(KB)를 지정하는 unsigned int 값입니다.

0(기본 스택 크기 사용)

ContextPriority

각 컨텍스트의 스레드 우선 순위를 지정하는 int 값입니다. 이 값은 SetThreadPriority 또는 INHERIT_THREAD_PRIORITY에 전달할 수 있는 임의의 값이 될 수 있습니다.

THREAD_PRIORITY_NORMAL

SchedulingProtocol

사용할 예약 알고리즘을 지정하는 Concurrency::SchedulingProtocolType 값입니다.

EnhanceScheduleGroupLocality

DynamicProgressFeedback

통계에 기반한 진행 정보에 따라 리소스를 다시 분산시킬지 여부를 지정하는 Concurrency::DynamicProgressFeedbackType 값입니다.

참고   이 정책을 ProgressFeedbackDisabled로 설정하지 마십시오. ProgressFeedbackDisabled는 런타임에서 사용하도록 예약되어 있습니다.

ProgressFeedbackEnabled

각 스케줄러는 작업을 예약할 때 자체의 정책을 사용합니다. 따라서 한 스케줄러와 연결된 정책은 다른 스케줄러의 동작에 영향을 주지 않습니다. 또한 Scheduler 개체를 만든 후에는 스케줄러 정책을 변경할 수 없습니다.

중요

런타임에서 만든 스레드에 대한 특성을 제어할 때는 스케줄러 정책만 사용하십시오. 런타임에서 만든 스레드의 우선 순위 또는 스레드 선호도를 변경하면 정의되지 않은 동작이 발생합니다.

기본 스케줄러를 명시적으로 만들지 않으면 런타임에서 기본 스케줄러가 자동으로 만들어집니다. 응용 프로그램에서 기본 스케줄러를 사용하되 해당 스케줄러에서 사용할 정책을 지정하려는 경우 병렬 작업을 예약하기 전에 Concurrency::Scheduler::SetDefaultSchedulerPolicy 메서드를 호출합니다. Scheduler::SetDefaultSchedulerPolicy 메서드를 호출하지 않으면 런타임에서는 이 표의 기본 정책 값을 사용합니다.

스케줄러 정책의 복사본을 검색하려면 Concurrency::CurrentScheduler::GetPolicyConcurrency::Scheduler::GetPolicy 메서드를 사용합니다. 이러한 메서드로부터 받는 정책 값은 스케줄러를 만들 때 지정하는 정책 값과 다를 수 있습니다. 예를 들어 UMSThreadDefault 정책 값은 64비트 버전의 Windows 7과 같이 운영 체제에 UMS 기능이 있는 경우 스케줄러에서 UMS 스레드를 사용하도록 지정합니다. UMS 스레드를 사용할 수 없는 경우에는 스케줄러가 이 정책 값을 ThreadScheduler로 설정하여 스케줄러에서 일반 스레드를 사용하도록 지정합니다.

예제

특정 스케줄러 정책을 사용하여 스케줄러의 동작을 제어하는 예제를 보려면 방법: 특정 스케줄러 정책 지정방법: 특정 스케줄러 정책을 사용하는 에이전트 만들기를 참조하십시오.

참고 항목

작업

방법: 특정 스케줄러 정책 지정

방법: 특정 스케줄러 정책을 사용하는 에이전트 만들기

개념

작업 스케줄러(동시성 런타임)

변경 기록

날짜

변경 내용

이유

2010년 7월

내용을 다시 구성했습니다.

향상된 기능 관련 정보