스케줄러 인스턴스
이 문서에서는 동시성 런타임에서 스케줄러 인스턴스의 역할과 동시성::Scheduler 및 동시성::CurrentScheduler 클래스를 사용하여 스케줄러 인스턴스를 만들고 관리하는 방법을 설명합니다. Scheduler 인스턴스는 명시적 일정 정책을 특정 유형의 워크로드와 연결하려는 경우에 유용합니다. 예를 들어 높은 스레드 우선 순위로 일부 작업을 실행하기 위한 스케줄러 인스턴스를 하나 만들고, 기본 스케줄러를 사용하여 보통 스레드 우선 순위로 다른 작업을 실행할 수 있습니다.
팁
동시성 런타임은 기본 스케줄러를 제공하므로 애플리케이션에서 스케줄러를 만들 필요가 없습니다. 작업 스케줄러는 애플리케이션의 성능을 미세 조정하는 데 도움이 되므로 동시성 런타임을 접하는 경우 PPL(병렬 패턴 라이브러리) 또는 비동기 에이전트 라이브러리로 시작하는 것이 좋습니다.
섹션
Scheduler 및 CurrentScheduler 클래스
작업 스케줄러를 사용하면 애플리케이션에서 하나 이상의 스케줄러 인스턴스를 사용하여 작업을 예약할 수 있습니다 . 동시성::Scheduler 클래스는 스케줄러 인스턴스를 나타내며 예약 작업과 관련된 기능을 캡슐화합니다.
스케줄러에 연결된 스레드를 실행 컨텍스트 또는 컨텍스트라고 합니다. 하나의 스케줄러는 언제든지 현재 컨텍스트에서 활성화될 수 있습니다. 활성 스케줄러는 현재 스케줄러라고도합니다. 동시성 런타임은 동시성::CurrentScheduler 클래스를 사용하여 현재 스케줄러에 대한 액세스를 제공합니다. 한 컨텍스트에 대한 현재 스케줄러는 다른 컨텍스트에 대한 현재 스케줄러와 다를 수 있습니다. 런타임은 현재 스케줄러의 프로세스 수준 표현을 제공하지 않습니다.
일반적으로 CurrentScheduler
클래스는 현재 스케줄러에 액세스하는 데 사용됩니다. 클래스는 Scheduler
현재 스케줄러가 아닌 스케줄러를 관리해야 하는 경우에 유용합니다.
다음 섹션에서는 스케줄러 인스턴스를 만들고 관리하는 방법을 설명합니다. 이러한 작업을 보여 주는 전체 예제는 방법: Scheduler 인스턴스 관리를 참조하세요.
[맨 위로 이동]
Scheduler 인스턴스 만들기
다음과 같은 세 가지 방법으로 개체를 만들 수 있습니다.Scheduler
스케줄러가 없으면 런타임 기능(예: 병렬 알고리즘)을 사용하여 작업을 수행할 때 런타임에서 기본 스케줄러를 만듭니다. 기본 스케줄러는 병렬 작업을 시작하는 컨텍스트의 현재 스케줄러가 됩니다.
동시성::CurrentScheduler::Create 메서드는 특정 정책을 사용하고 해당 스케줄러를 현재 컨텍스트와 연결하는 개체를 만듭니다
Scheduler
.동시성::Scheduler::Create 메서드는 특정 정책을 사용하지만 현재 컨텍스트와 연결하지 않는 개체를 만듭니다
Scheduler
.
런타임에서 기본 스케줄러를 만들 수 있도록 허용하면 모든 동시 작업이 동일한 스케줄러를 공유할 수 있습니다. 일반적으로 PPL(병렬 패턴 라이브러리) 또는 비동기 에이전트 라이브러리에서 제공하는 기능은 병렬 작업을 수행하는 데 사용됩니다. 따라서 정책 또는 수명을 제어하기 위해 스케줄러와 직접 작업할 필요가 없습니다. PPL 또는 에이전트 라이브러리를 사용하는 경우 런타임은 기본 스케줄러가 없는 경우 기본 스케줄러를 만들고 각 컨텍스트에 대한 현재 스케줄러로 만듭니다. 스케줄러를 만들고 현재 스케줄러로 설정하는 경우 런타임은 해당 스케줄러를 사용하여 작업을 예약합니다. 특정 일정 정책이 필요한 경우에만 추가 스케줄러 인스턴스를 만듭니다. 스케줄러와 연결된 정책에 대한 자세한 내용은 Scheduler 정책을 참조하세요.
[맨 위로 이동]
Scheduler 인스턴스의 수명 관리
런타임은 참조 계산 메커니즘을 사용하여 개체의 수 Scheduler
명을 제어합니다.
메서드 또는 메서드를 CurrentScheduler::Create
Scheduler::Create
사용하여 개체를 Scheduler
만들 때 런타임은 해당 스케줄러의 초기 참조 수를 1로 설정합니다. 런타임은 동시성::Scheduler::Attach 메서드를 호출할 때 참조 수를 증분합니다. 이 메서드는 Scheduler::Attach
개체를 Scheduler
현재 컨텍스트와 연결합니다. 이렇게 하면 현재 스케줄러가 됩니다. 메서드를 CurrentScheduler::Create
호출할 때 런타임은 개체를 Scheduler
만들고 현재 컨텍스트에 연결하고 참조 수를 1로 설정합니다. 동시성::Scheduler::Reference 메서드를 사용하여 개체의 참조 수를 증분할 수도 있습니다Scheduler
.
런타임은 동시성::CurrentScheduler::D etach 메서드를 호출하여 현재 스케줄러를 분리하거나 동시성::Scheduler::Release 메서드를 호출할 때 참조 수를 감소합니다. 참조 수가 0에 도달하면 예약된 모든 작업이 완료된 후 런타임이 개체를 삭제합니다 Scheduler
. 실행 중인 작업은 현재 스케줄러의 참조 수를 증분할 수 있습니다. 따라서 참조 수가 0에 도달하고 태스크가 참조 수를 증분하는 경우 런타임은 참조 수가 다시 0에 도달하고 모든 작업이 완료될 때까지 개체를 삭제 Scheduler
하지 않습니다.
런타임은 각 컨텍스트에 대한 개체의 Scheduler
내부 스택을 기본. 또는 CurrentScheduler::Create
메서드를 Scheduler::Attach
호출할 때 런타임은 현재 컨텍스트에 대한 스택에 해당 Scheduler
개체를 푸시합니다. 이렇게 하면 현재 스케줄러가 됩니다. 호출 CurrentScheduler::Detach
할 때 런타임은 현재 컨텍스트에 대한 스택에서 현재 스케줄러를 팝하고 이전 스케줄러를 현재 스케줄러로 설정합니다.
런타임은 스케줄러 인스턴스의 수명을 관리하는 여러 가지 방법을 제공합니다. 다음 표에서는 스케줄러를 만들거나 현재 컨텍스트에 연결하는 각 메서드의 현재 컨텍스트에서 스케줄러를 해제하거나 분리하는 적절한 메서드를 보여 줍니다.
메서드 만들기 또는 연결 | Release 또는 detach 메서드 |
---|---|
CurrentScheduler::Create |
CurrentScheduler::Detach |
Scheduler::Create |
Scheduler::Release |
Scheduler::Attach |
CurrentScheduler::Detach |
Scheduler::Reference |
Scheduler::Release |
부적절한 릴리스 또는 분리 메서드를 호출하면 런타임에서 지정되지 않은 동작이 생성됩니다.
예를 들어 런타임에서 기본 스케줄러를 만드는 PPL과 같은 기능을 사용하는 경우 이 스케줄러를 해제하거나 분리하지 마세요. 런타임은 만든 스케줄러의 수명을 관리합니다.
런타임은 모든 작업이 완료되기 전에 개체를 삭제 Scheduler
하지 않으므로 동시성::Scheduler::RegisterShutdownEvent 메서드 또는 동시성::CurrentScheduler::RegisterShutdownEvent 메서드를 사용하여 개체가 제거될 때 Scheduler
알림을 받을 수 있습니다. 이 기능은 개체가 예약한 모든 작업이 완료될 Scheduler
때까지 기다려야 하는 경우에 유용합니다.
[맨 위로 이동]
메서드 및 기능
이 섹션에서는 클래스 및 Scheduler
클래스의 중요한 메서드를 CurrentScheduler
요약합니다.
클래스를 CurrentScheduler
현재 컨텍스트에서 사용할 스케줄러를 만들기 위한 도우미로 간주합니다. 클래스를 Scheduler
사용하면 다른 컨텍스트에 속하는 스케줄러를 제어할 수 있습니다.
다음 표에서는 클래스에서 정의한 중요한 메서드를 보여 줍니다 CurrentScheduler
.
메서드 | 설명 |
---|---|
만들기 | Scheduler 지정된 정책을 사용하여 현재 컨텍스트와 연결하는 개체를 만듭니다. |
가져오기 | 현재 컨텍스트와 연결된 개체에 Scheduler 대한 포인터를 검색합니다. 이 메서드는 개체의 Scheduler 참조 수를 증가시키지 않습니다. |
Detach | 현재 컨텍스트에서 현재 스케줄러를 분리하고 이전 스케줄러를 현재 스케줄러로 설정합니다. |
RegisterShutdownEvent | 현재 스케줄러가 제거될 때 런타임이 설정하는 이벤트를 등록합니다. |
CreateScheduleGroup | 현재 스케줄러에서 동시성::ScheduleGroup 개체를 만듭니다. |
ScheduleTask | 현재 스케줄러의 예약 큐에 간단한 작업을 추가합니다. |
GetPolicy | 현재 스케줄러와 연결된 정책의 복사본을 검색합니다. |
다음 표에서는 클래스에서 정의한 중요한 메서드를 보여 줍니다 Scheduler
.
메서드 | 설명 |
---|---|
만들기 | Scheduler 지정된 정책을 사용하는 개체를 만듭니다. |
연결 | 개체를 Scheduler 현재 컨텍스트와 연결합니다. |
참조 | 개체의 참조 카운터를 증분합니다 Scheduler . |
릴리스 | 개체의 참조 카운터를 줄입니다 Scheduler . |
RegisterShutdownEvent | 개체가 제거될 때 Scheduler 런타임이 설정하는 이벤트를 등록합니다. |
CreateScheduleGroup | 개체에 동시성::ScheduleGroup 개체를 Scheduler 만듭니다. |
ScheduleTask | 개체에서 간단한 작업을 예약합니다 Scheduler . |
GetPolicy | 개체와 연결된 정책의 복사본을 Scheduler 검색합니다. |
SetDefaultSchedulerPolicy | 런타임이 기본 스케줄러를 만들 때 사용할 정책을 설정합니다. |
ResetDefaultSchedulerPolicy | 호출 전에 활성화된 정책으로 기본 정책을 복원합니다 SetDefaultSchedulerPolicy . 이 호출 후에 기본 스케줄러가 만들어지면 런타임은 기본 정책 설정을 사용하여 스케줄러를 만듭니다. |
[맨 위로 이동]
예시
스케줄러 인스턴스를 만들고 관리하는 방법에 대한 기본 예제는 방법: Scheduler 인스턴스 관리를 참조하세요.