스케줄러 정책

 

Visual Studio 2017 에 대한 최신 설명서는 Visual Studio 2017 설명서를 참조하세요.

이 문서에서는 동시성 런타임에서 스케줄러 정책의 역할에 대해 설명합니다. 스케줄러 정책은 스케줄러에서 작업을 관리할 때 사용하는 전략을 제어합니다. 예를 들어, THREAD_PRIORITY_NORMAL 을 실행하는 일부 작업과 THREAD_PRIORITY_HIGHEST 을 실행하는 다른 작업에 필요한 응용 프로그램을 고려합니다. 두 가지 스케줄러 인스턴스를 만들 수 있습니다: ContextPriority 정책을 THREAD_PRIORITY_NORMAL 로, 같은 정책을 지정하는 또다른 개체를 THREAD_PRIORITY_HIGHEST 로 지정합니다.

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

System_CAPS_ICON_tip.jpg 

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

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

No code example is currently available or this language may not be supported.

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 에 이 정책을 설정하지 마십시오.
ProgressFeedbackEnabled

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

System_CAPS_ICON_important.jpg 중요

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

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

스케줄러 정책의 복사본을 검색하려면 concurrency::CurrentScheduler::GetPolicyconcurrency::Scheduler::GetPolicy 메서드를 사용합니다. 이러한 메서드로부터 받는 정책 값은 스케줄러를 만들 때 지정하는 정책 값과 다를 수 있습니다.

예제

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

참고 항목

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