일정 그룹

이 문서에서는 동시성 런타임에서 일정 그룹의 역할을 설명합니다. 일정 그룹은 관련 작업을 함께 선호하거나 그룹화합니다. 모든 스케줄러에는 하나 이상의 일정 그룹이 있습니다. 작업 간에 높은 수준의 국부성이 필요한 경우, 예를 들어 동일한 프로세서 노드에서 관련 작업 그룹을 실행하면 이점이 있는 경우 일정 그룹을 사용합니다. 반대로 애플리케이션에 특정 품질 요구 사항이 있는 경우(예: 작업 집합에 할당된 처리 리소스의 양을 제한하려는 경우) 스케줄러 인스턴스를 사용합니다. 스케줄러 인스턴스에 대한 자세한 내용은 Scheduler 인스턴스를 참조 하세요.

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

모든 Scheduler 개체에는 모든 일정 노드에 대한 기본 일정 그룹이 있습니다. 일정 노드기본 시스템 토폴로지로 매핑됩니다. 런타임은 모든 프로세서 패키지 또는 NUMA(Non-Uniform Memory Architecture) 노드에 대해 하나의 예약 노드를 만듭니다. 이 노드는 숫자가 더 큽니다. 작업을 일정 그룹과 명시적으로 연결하지 않으면 스케줄러는 작업을 추가할 그룹을 선택합니다.

SchedulingProtocol 스케줄러 정책은 스케줄러가 각 일정 그룹의 작업을 실행하는 순서에 영향을 줍니다. 기본값으로 설정 EnhanceScheduleGroupLocality 되면 SchedulingProtocol 작업 스케줄러는 현재 작업이 완료되거나 협조적으로 생성될 때 작업 중인 일정 그룹에서 다음 작업을 선택합니다. 작업 스케줄러는 사용 가능한 다음 그룹으로 이동하기 전에 현재 일정 그룹에서 작업을 검색합니다. 반대로, 설정EnhanceForwardProgress되면 SchedulingProtocol 각 작업이 완료되거나 생성되면 스케줄러가 다음 일정 그룹으로 이동합니다. 이러한 정책을 비교하는 예제는 방법: 일정 그룹을 사용하여 실행 순서에 영향을 줍니다.

런타임은 동시성::ScheduleGroup 클래스를 사용하여 일정 그룹을 나타냅니다. 개체를 ScheduleGroup 만들려면 동시성::CurrentScheduler::CreateScheduleGroup 또는 concurrency::Scheduler::CreateScheduleGroup 메서드를 호출합니다. 런타임은 개체와 마찬가지로 Scheduler 참조 계산 메커니즘을 사용하여 개체의 수 ScheduleGroup 명을 제어합니다. 개체를 ScheduleGroup 만들 때 런타임은 참조 카운터를 1로 설정합니다. 동시성::ScheduleGroup::Reference 메서드는 참조 카운터를 하나씩 증가합니다. 동시성::ScheduleGroup::Release 메서드는 참조 카운터를 하나씩 감소합니다.

동시성 런타임의 여러 형식을 사용하면 개체를 일정 그룹과 연결할 수 있습니다. 예를 들어 동시성::에이전트 클래스 및 메시지 블록 클래스(예: concurrency::unbounded_buffer, concurrency::join 및 concurrency::timer)는 개체를 사용하는 ScheduleGroup 생성자의 오버로드된 버전을 제공합니다. 런타임은 이 ScheduleGroup 개체와 연결된 개체를 사용하여 Scheduler 작업을 예약합니다.

동시성::ScheduleGroup::ScheduleTask 메서드를 사용하여 간단한 작업을 예약할 수도 있습니다. 간단한 작업에 대한 자세한 내용은 경량 작업을 참조 하세요.

예시

일정 그룹을 사용하여 작업 실행 순서를 제어하는 예제는 방법: 일정 그룹을 사용하여 실행 순서에 영향을 줍니다.

참고 항목

작업 Scheduler
스케줄러 인스턴스
방법: 실행 순서에 영향을 주는 일정 그룹 사용