Scheduler 정책

이 문서에서는 동시성 런타임에서 스케줄러 정책의 역할을 설명합니다. 스케줄러 정책은 스케줄러가 작업을 관리할 때 사용하는 전략을 제어합니다. 예를 들어, 일부 작업은 THREAD_PRIORITY_NORMAL에서 실행해야 하고 다른 작업은 THREAD_PRIORITY_HIGHEST에서 실행해야 하는 애플리케이션을 고려해 보겠습니다. 두 가지 스케줄러 인스턴스를 만들 수 있으며, 하나는 ContextPriority 정책을 THREAD_PRIORITY_NORMAL로 지정하고, 다른 하나는 동일한 정책을 THREAD_PRIORITY_HIGHEST로 지정합니다.

스케줄러 정책을 사용하면 사용 가능한 처리 리소스를 나누고 고정된 리소스 집합을 각 스케줄러에 할당할 수 있습니다. 예를 들어 4개의 프로세서를 초과하여 확장되지 않는 병렬 알고리즘을 고려해 보세요. 4개 이하의 프로세서를 동시에 사용하도록 작업을 제한하는 스케줄러 정책을 만들 수 있습니다.

동시성 런타임에서는 기본 스케줄러를 제공합니다. 따라서 애플리케이션에서 만들 필요가 없습니다. 작업 스케줄러는 애플리케이션의 성능을 미세 조정하는 데 도움이 되므로 동시성 런타임을 접하는 경우 PPL(병렬 패턴 라이브러리) 또는 비동기 에이전트 라이브러리로 시작하는 것이 좋습니다.

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

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

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

정책 키 설명 기본값
SchedulerKind 작업을 예약하는 데 사용할 스레드 유형을 지정하는 동시성::SchedulerType 값입니다. ThreadScheduler(일반 스레드 사용) 이 키에 유효한 유일한 값입니다.
MaxConcurrency unsigned int 스케줄러에서 사용하는 최대 동시성 리소스 수를 지정하는 값입니다. concurrency::MaxExecutionResources
MinConcurrency unsigned int 스케줄러에서 사용하는 최소 동시성 리소스 수를 지정하는 값입니다. 1
TargetOversubscriptionFactor unsigned int 각 처리 리소스에 할당할 스레드 수를 지정하는 값입니다. 1
LocalContextCacheSize unsigned int 각 가상 프로세서의 로컬 큐에 캐시할 수 있는 최대 컨텍스트 수를 지정하는 값입니다. 8
ContextStackSize unsigned int 각 컨텍스트에 대해 예약할 스택의 크기를 킬로바이트 단위로 지정하는 값입니다. 0 (기본 스택 크기 사용)
ContextPriority int 각 컨텍스트의 스레드 우선 순위를 지정하는 값입니다. SetThreadPriority 또는 INHERIT_THREAD_PRIORITY.에 전달할 수 있는 모든 값일 수 있습니다. THREAD_PRIORITY_NORMAL
SchedulingProtocol 사용할 예약 알고리즘을 지정하는 동시성::SchedulingProtocolType 값입니다. EnhanceScheduleGroupLocality
DynamicProgressFeedback 통계 기반 진행률 정보에 따라 리소스의 균형을 조정할지 여부를 지정하는 concurrency::D ynamicProgressFeedbackType 값입니다.

참고 이 정책은 런타임에서 ProgressFeedbackDisabled 사용하도록 예약되어 있으므로 설정하지 마세요.
ProgressFeedbackEnabled

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

Important

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

명시적으로 만들지 않으면 런타임에서 기본 스케줄러를 만듭니다. 애플리케이션에서 기본 스케줄러를 사용하지만 해당 스케줄러에서 사용할 정책을 지정하려면 병렬 작업을 예약하기 전에 동시성::Scheduler::SetDefaultSchedulerPolicy 메서드를 호출합니다. 메서드를 Scheduler::SetDefaultSchedulerPolicy 호출하지 않으면 런타임은 테이블의 기본 정책 값을 사용합니다.

동시성::CurrentScheduler::GetPolicy동시성::Scheduler::GetPolicy 메서드를 사용하여 스케줄러 정책의 복사본을 검색합니다. 이러한 메서드에서 받는 정책 값은 스케줄러를 만들 때 지정하는 정책 값과 다를 수 있습니다.

예시

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

참고 항목

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