일정 그룹Schedule Groups

이 문서에서는 동시성 런타임에서 일정 그룹의 역할을 설명 합니다.This document describes the role of schedule groups in the Concurrency Runtime. 일정 그룹 은 관련 된 작업을 선호도 하거나 그룹화 합니다.A schedule group affinitizes, or groups, related tasks together. 모든 스케줄러에는 하나 이상의 일정 그룹이 있습니다.Every scheduler has one or more schedule groups. 작업 간에 높은 수준의 국부성이 필요한 경우, 예를 들어 동일한 프로세서 노드에서 관련 작업 그룹을 실행하면 이점이 있는 경우 일정 그룹을 사용합니다.Use schedule groups when you require a high degree of locality among tasks, for example, when a group of related tasks benefit from executing on the same processor node. 반대로, 작업 집합에 할당 되는 처리 리소스의 양을 제한 하려는 경우와 같이 응용 프로그램에 특정 품질 요구 사항이 있는 경우 스케줄러 인스턴스를 사용 합니다.Conversely, use scheduler instances when your application has specific quality requirements, for example, when you want to limit the amount of processing resources that are allocated to a set of tasks. Scheduler 인스턴스에 대 한 자세한 내용은 Scheduler instances을 참조 하세요.For more information about scheduler instances, see Scheduler Instances.

동시성 런타임은 기본 스케줄러를 제공하므로 애플리케이션에서 스케줄러를 만들 필요가 없습니다.The Concurrency Runtime provides a default scheduler, and therefore you are not required to create one in your application. 작업 스케줄러는 응용 프로그램의 성능을 미세 조정 하는 데 도움이 되므로 동시성 런타임를 처음 접하는 경우 PPL (병렬 패턴 라이브러리) 또는 비동기 에이전트 라이브러리 를 사용 하는 것이 좋습니다.Because the Task Scheduler helps you fine-tune the performance of your applications, we recommend that you start with the Parallel Patterns Library (PPL) or the Asynchronous Agents Library if you are new to the Concurrency Runtime.

모든 Scheduler 개체에는 일정 노드에 대 한 기본 일정 그룹이 있습니다.Every Scheduler object has a default schedule group for every scheduling node. 일정 노드 는 기본 시스템 토폴로지에 매핑됩니다.A scheduling node maps to the underlying system topology. 런타임은 모든 프로세서 패키지 또는 NUMA (Non-uniform Memory Architecture) 노드에 대해 하나의 일정 노드를 만듭니다 .이 노드 수는 더 큽니다.The runtime creates one scheduling node for every processor package or Non-Uniform Memory Architecture (NUMA) node, whichever number is larger. 작업을 일정 그룹에 명시적으로 연결 하지 않으면 스케줄러에서 작업을 추가할 그룹을 선택 합니다.If you do not explicitly associate a task with a schedule group, the scheduler chooses which group to add the task to.

SchedulingProtocol scheduler 정책은 스케줄러가 각 일정 그룹의 작업을 실행 하는 순서에 영향을 미칩니다.The SchedulingProtocol scheduler policy influences the order in which the scheduler executes the tasks in each schedule group. SchedulingProtocolEnhanceScheduleGroupLocality (기본값)로 설정 하면 작업 스케줄러는 현재 태스크가 완료 되거나 협조적으로 생성 될 때 작업 중인 일정 그룹에서 다음 작업을 선택 합니다.When SchedulingProtocol is set to EnhanceScheduleGroupLocality (which is the default), the Task Scheduler chooses the next task from the schedule group that it is working on when the current task finishes or cooperatively yields. 작업 스케줄러는 현재 일정 그룹에서 사용 가능한 다음 그룹으로 이동 하기 전에 작업을 검색 합니다.The Task Scheduler searches the current schedule group for work before it moves to the next available group. 반대로 SchedulingProtocolEnhanceForwardProgress로 설정 하면 스케줄러는 각 작업이 완료 되거나 생성 된 후 다음 일정 그룹으로 이동 합니다.Conversely, when SchedulingProtocol is set to EnhanceForwardProgress, the scheduler moves to the next schedule group after each task finishes or yields. 이러한 정책을 비교 하는 예제는 방법: 일정 그룹을 사용 하 여 실행 순서에 영향을 참조 하세요.For an example that compares these policies, see How to: Use Schedule Groups to Influence Order of Execution.

런타임은 concurrency:: ScheduleGroup 클래스를 사용 하 여 일정 그룹을 나타냅니다.The runtime uses the concurrency::ScheduleGroup class to represent schedule groups. ScheduleGroup 개체를 만들려면 concurrency:: CurrentScheduler:: CreateScheduleGroup 또는 Concurrency:: Scheduler:: CreateScheduleGroup 메서드를 호출 합니다.To create a ScheduleGroup object, call the concurrency::CurrentScheduler::CreateScheduleGroup or concurrency::Scheduler::CreateScheduleGroup method. 런타임은 참조 횟수 메커니즘을 사용 하 여 Scheduler 개체와 마찬가지로 ScheduleGroup 개체의 수명을 제어 합니다.The runtime uses a reference-counting mechanism to control the lifetime of ScheduleGroup objects, just as it does with Scheduler objects. ScheduleGroup 개체를 만들 때 런타임은 참조 카운터를 1로 설정 합니다.When you create a ScheduleGroup object, the runtime sets the reference counter to one. Concurrency:: ScheduleGroup:: reference 메서드는 참조 카운터를 1 씩 증가 시킵니다.The concurrency::ScheduleGroup::Reference method increments the reference counter by one. Concurrency:: ScheduleGroup:: Release 메서드는 참조 카운터를 1 씩 감소 시킵니다.The concurrency::ScheduleGroup::Release method decrements the reference counter by one.

동시성 런타임에서 많은 형식을 사용 하면 개체와 일정 그룹을 함께 연결할 수 있습니다.Many types in the Concurrency Runtime let you associate an object together with a schedule group. 예를 들어 concurrency:: agent 클래스와 concurrency:: unbounded_buffer, concurrency:: join및 concurrency::timer와 같은 메시지 블록 클래스는 ScheduleGroup 개체를 사용 하는 생성자의 오버 로드 된 버전을 제공 합니다.For example, the concurrency::agent class and message block classes such as concurrency::unbounded_buffer, concurrency::join, and concurrency::timer, provide overloaded versions of the constructor that take a ScheduleGroup object. 런타임은이 ScheduleGroup 개체와 연결 된 Scheduler 개체를 사용 하 여 작업을 예약 합니다.The runtime uses the Scheduler object that is associated with this ScheduleGroup object to schedule the task.

또한 concurrency:: ScheduleGroup:: ScheduleTask 메서드를 사용 하 여 간단한 작업을 예약할 수 있습니다.You can also use the concurrency::ScheduleGroup::ScheduleTask method to schedule a lightweight task. 경량 태스크에 대 한 자세한 내용은 경량 작업을 참조 하세요.For more information about lightweight tasks, see Lightweight Tasks.

예제Example

일정 그룹을 사용 하 여 작업 실행 순서를 제어 하는 예제는 방법: 일정 그룹을 사용 하 여 실행 순서에 영향을 참조 하세요.For an example that uses schedule groups to control the order of task execution, see How to: Use Schedule Groups to Influence Order of Execution.

참고 항목See also

작업 스케줄러Task Scheduler
스케줄러 인스턴스Scheduler Instances
방법: 실행 순서에 영향을 주는 일정 그룹 사용How to: Use Schedule Groups to Influence Order of Execution