IScheduler 구조체

작업 스케줄러의 추상화에 대한 인터페이스입니다. 동시성 런타임의 리소스 관리자는 이 인터페이스를 사용하여 작업 스케줄러와 통신합니다.

구문

struct IScheduler;

멤버

공용 메서드

이름 설명
IScheduler::AddVirtualProcessors 스케줄러에 사용할 가상 프로세서 루트 집합을 제공합니다. 각 IVirtualProcessorRoot 인터페이스는 스케줄러를 대신하여 작업을 수행할 수 있는 단일 스레드를 실행할 수 있는 권한을 나타냅니다.
IScheduler::GetId 스케줄러에 대한 고유 식별자를 반환합니다.
IScheduler::GetPolicy 스케줄러 정책의 복사본을 반환합니다. 스케줄러 정책에 대한 자세한 내용은 SchedulerPolicy를 참조 하세요.
IScheduler::NotifyResourcesExternallyBusy 이 스케줄러에 배열 ppVirtualProcessorRoots 의 가상 프로세서 루트 집합으로 표시되는 하드웨어 스레드가 이제 다른 스케줄러에서 사용되고 있음을 알 수 있습니다.
IScheduler::NotifyResourcesExternallyIdle 배열 ppVirtualProcessorRoots 의 가상 프로세서 루트 집합이 나타내는 하드웨어 스레드가 다른 스케줄러에서 사용되지 않는다는 것을 이 스케줄러에 알깁니다.
IScheduler::RemoveVirtualProcessors 이전에 이 스케줄러에 할당된 가상 프로세서 루트 제거를 시작합니다.
IScheduler::Statistics 작업 도착 및 완료율과 관련된 정보를 제공하고 스케줄러의 큐 길이를 변경합니다.

설명

Resource Manager와 통신하는 사용자 지정 스케줄러를 구현하는 경우 인터페이스의 구현을 IScheduler 제공해야 합니다. 이 인터페이스는 스케줄러와 Resource Manager 간의 양방향 통신 채널의 한쪽 끝입니다. 다른 쪽 끝은 Resource Manager에서 IResourceManager 구현하는 인터페이스 및 ISchedulerProxy 인터페이스로 표시됩니다.

상속 계층 구조

IScheduler

요구 사항

헤더: concrtrm.h

네임스페이스: 동시성

IScheduler::AddVirtualProcessors 메서드

스케줄러에 사용할 가상 프로세서 루트 집합을 제공합니다. 각 IVirtualProcessorRoot 인터페이스는 스케줄러를 대신하여 작업을 수행할 수 있는 단일 스레드를 실행할 수 있는 권한을 나타냅니다.

virtual void AddVirtualProcessors(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

매개 변수

ppVirtualProcessorRoots
스케줄러에 추가되는 가상 프로세서 루트를 나타내는 인터페이스 배열 IVirtualProcessorRoot 입니다.

count
배열의 IVirtualProcessorRoot 인터페이스 수입니다.

설명

Resource Manager는 메서드를 AddVirtualProcessor 호출하여 초기 가상 프로세서 루트 집합을 스케줄러에 부여합니다. 스케줄러 간에 리소스의 균형을 조정할 때 스케줄러에 가상 프로세서 루트를 추가하는 메서드를 호출할 수도 있습니다.

IScheduler::GetId 메서드

스케줄러에 대한 고유 식별자를 반환합니다.

virtual unsigned int GetId() const = 0;

Return Value

고유한 정수 식별자입니다.

설명

Resource Manager에서 제공하는 메서드에 대한 매개 변수로 인터페이스를 사용하기 전에 GetSchedulerId 함수를 사용하여 인터페이스를 구현 IScheduler 하는 개체에 대한 고유 식별자를 가져와야 합니다. 함수가 호출될 때 GetId 동일한 식별자를 반환해야 합니다.

다른 원본에서 가져온 식별자는 정의되지 않은 동작을 초래할 수 있습니다.

IScheduler::GetPolicy 메서드

스케줄러 정책의 복사본을 반환합니다. 스케줄러 정책에 대한 자세한 내용은 SchedulerPolicy를 참조 하세요.

virtual SchedulerPolicy GetPolicy() const = 0;

Return Value

스케줄러 정책의 복사본입니다.

IScheduler::NotifyResourcesExternallyBusy 메서드

이 스케줄러에 배열 ppVirtualProcessorRoots 의 가상 프로세서 루트 집합으로 표시되는 하드웨어 스레드가 이제 다른 스케줄러에서 사용되고 있음을 알 수 있습니다.

virtual void NotifyResourcesExternallyBusy(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

매개 변수

ppVirtualProcessorRoots
다른 스케줄러가 사용 중인 하드웨어 스레드와 연결된 인터페이스 배열 IVirtualProcessorRoot 입니다.

count
배열의 IVirtualProcessorRoot 인터페이스 수입니다.

설명

특정 하드웨어 스레드를 동시에 여러 스케줄러에 할당할 수 있습니다. 한 가지 이유는 리소스를 공유하지 않고 모든 스케줄러에 대한 최소 동시성을 충족하기에 시스템에 하드웨어 스레드가 충분하지 않기 때문입니다. 또 다른 가능성은 소유 스케줄러가 사용하지 않을 때 해당 하드웨어 스레드의 모든 가상 프로세서 루트를 비활성화하여 리소스가 다른 스케줄러에 일시적으로 할당된다는 것입니다.

하드웨어 스레드의 구독 수준은 해당 하드웨어 스레드와 연결된 구독된 스레드 및 활성화된 가상 프로세서 루트의 수로 표시됩니다. 특정 스케줄러의 관점에서 하드웨어 스레드의 외부 구독 수준은 다른 스케줄러가 기여하는 구독의 부분입니다. 하드웨어 스레드에 대한 외부 구독 수준이 0에서 양수 영역으로 이동하면 리소스가 외부에서 사용 중이라는 알림이 스케줄러로 전송됩니다.

이 메서드를 통한 알림은 정책 키의 값이 정책 키의 값 MinConcurrency 과 같은 정책이 있는 스케줄러에 MaxConcurrency 만 전송됩니다. 스케줄러 정책에 대한 자세한 내용은 SchedulerPolicy를 참조 하세요.

알림을 받을 자격이 있는 스케줄러는 생성될 때 초기 알림 집합을 가져오며, 방금 할당된 리소스가 외부에서 사용 중인지 유휴 상태인지 여부를 알려줍니다.

IScheduler::NotifyResourcesExternallyIdle 메서드

배열 ppVirtualProcessorRoots 의 가상 프로세서 루트 집합이 나타내는 하드웨어 스레드가 다른 스케줄러에서 사용되지 않는다는 것을 이 스케줄러에 알깁니다.

virtual void NotifyResourcesExternallyIdle(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

매개 변수

ppVirtualProcessorRoots
다른 스케줄러가 유휴 상태가 된 하드웨어 스레드와 연결된 인터페이스 배열 IVirtualProcessorRoot 입니다.

count
배열의 IVirtualProcessorRoot 인터페이스 수입니다.

설명

특정 하드웨어 스레드를 동시에 여러 스케줄러에 할당할 수 있습니다. 한 가지 이유는 리소스를 공유하지 않고 모든 스케줄러에 대한 최소 동시성을 충족하기에 시스템에 하드웨어 스레드가 충분하지 않기 때문입니다. 또 다른 가능성은 소유 스케줄러가 사용하지 않을 때 해당 하드웨어 스레드의 모든 가상 프로세서 루트를 비활성화하여 리소스가 다른 스케줄러에 일시적으로 할당된다는 것입니다.

하드웨어 스레드의 구독 수준은 해당 하드웨어 스레드와 연결된 구독된 스레드 및 활성화된 가상 프로세서 루트의 수로 표시됩니다. 특정 스케줄러의 관점에서 하드웨어 스레드의 외부 구독 수준은 다른 스케줄러가 기여하는 구독의 부분입니다. 하드웨어 스레드에 대한 외부 구독 수준이 이전의 양수 값에서 0으로 떨어지면 리소스가 외부에서 사용 중이라는 알림이 스케줄러로 전송됩니다.

이 메서드를 통한 알림은 정책 키의 값이 정책 키의 값 MinConcurrency 과 같은 정책이 있는 스케줄러에 MaxConcurrency 만 전송됩니다. 스케줄러 정책에 대한 자세한 내용은 SchedulerPolicy를 참조 하세요.

알림을 받을 자격이 있는 스케줄러는 생성될 때 초기 알림 집합을 가져오며, 방금 할당된 리소스가 외부에서 사용 중인지 유휴 상태인지 여부를 알려줍니다.

IScheduler::RemoveVirtualProcessors 메서드

이전에 이 스케줄러에 할당된 가상 프로세서 루트 제거를 시작합니다.

virtual void RemoveVirtualProcessors(
    _In_reads_(count) IVirtualProcessorRoot** ppVirtualProcessorRoots,
    unsigned int count) = 0;

매개 변수

ppVirtualProcessorRoots
제거할 가상 프로세서 루트를 나타내는 인터페이스의 배열 IVirtualProcessorRoot 입니다.

count
배열의 IVirtualProcessorRoot 인터페이스 수입니다.

설명

Resource Manager는 스케줄러에서 가상 프로세서 루트 집합을 다시 가져오는 메서드를 호출 RemoveVirtualProcessors 합니다. 스케줄러는 가상 프로세서 루트를 사용하여 수행될 때 각 인터페이스에서 Remove 메서드를 호출해야 합니다. 메서드를 IVirtualProcessorRoot 호출한 후에는 인터페이스를 Remove 사용하지 마세요.

매개 변수 ppVirtualProcessorRoots 는 인터페이스 배열을 가리킵니다. 제거할 가상 프로세서 루트 집합 중 루트가 활성화된 적이 없는 경우 메서드를 사용하여 Remove 즉시 반환할 수 있습니다. 활성화되어 작업을 실행 중이거나 비활성화되어 작업이 도착할 때까지 대기 중인 루트는 비동기적으로 반환되어야 합니다. 스케줄러는 가능한 한 빨리 가상 프로세서 루트를 제거하려고 모든 시도를 해야 합니다. 가상 프로세서 루트 제거를 지연하면 스케줄러 내에서 의도하지 않은 초과 구독이 발생할 수 있습니다.

IScheduler::Statistics 메서드

작업 도착 및 완료율과 관련된 정보를 제공하고 스케줄러의 큐 길이를 변경합니다.

virtual void Statistics(
    _Out_ unsigned int* pTaskCompletionRate,
    _Out_ unsigned int* pTaskArrivalRate,
    _Out_ unsigned int* pNumberOfTasksEnqueued) = 0;

매개 변수

pTaskCompletionRate
이 메서드에 대한 마지막 호출 이후 스케줄러가 완료한 작업 수입니다.

pTaskArrivalRate
이 메서드에 대한 마지막 호출 이후 스케줄러에 도착한 작업 수입니다.

pNumberOfTasksEnqueued
모든 스케줄러 큐의 총 작업 수입니다.

설명

이 메서드는 스케줄러에 대한 통계를 수집하기 위해 Resource Manager에서 호출됩니다. 여기에 수집된 통계는 동적 피드백 알고리즘을 구동하여 스케줄러에 더 많은 리소스를 할당하는 것이 적절한 시기와 리소스를 제거해야 하는 시기를 결정하는 데 사용됩니다. 스케줄러에서 제공하는 값은 낙관적일 수 있으며 현재 개수를 정확하게 반영할 필요는 없습니다.

리소스 관리자에서 작업 도착 등에 대한 피드백을 사용하여 사용자의 스케줄러와 리소스 관리자에 등록된 다른 스케줄러 간에 리소스 균형을 조정하는 방법을 결정하려면 이 메서드를 구현해야 합니다. 통계를 수집하지 않도록 선택하는 경우 정책 키를 DynamicProgressFeedback 스케줄러 정책의 값 DynamicProgressFeedbackDisabled 으로 설정할 수 있으며 Resource Manager는 스케줄러에서 이 메서드를 호출하지 않습니다.

통계 정보가 없는 경우 Resource Manager는 하드웨어 스레드 구독 수준을 사용하여 리소스 할당 및 마이그레이션을 결정합니다. 구독 수준에 대한 자세한 내용은 IExecutionResource::CurrentSubscriptionLevel을 참조하세요.

참고 항목

concurrency 네임스페이스
PolicyElementKey
SchedulerPolicy 클래스
IExecutionContext 구조체
IThreadProxy 구조체
IVirtualProcessorRoot 구조체
IResourceManager 구조체