다음을 통해 공유


일정 우선 순위

스레드는 예약 우선 순위따라 실행되도록 예약됩니다. 각 스레드에는 예약 우선 순위가 할당됩니다. 우선 순위 수준은 0(가장 낮은 우선 순위)에서 31(가장 높은 우선 순위)에 이르기까지 다양합니다. 0페이지 스레드만 우선 순위가 0일 수 있습니다. (0페이지 스레드는 실행해야 하는 다른 스레드가 없는 경우 무료 페이지를 0으로 만드는 시스템 스레드입니다.)

시스템은 동일한 우선 순위의 모든 스레드를 동일하게 처리합니다. 시스템은 우선 순위가 가장 높은 모든 스레드에 라운드 로빈 방식으로 시간 조각을 할당합니다. 이러한 스레드를 실행할 준비가 되어 있지 않은 경우 시스템은 다음으로 우선 순위가 가장 높은 모든 스레드에 라운드 로빈 방식으로 시간 조각을 할당합니다. 우선 순위가 높은 스레드를 실행할 수 있게 되면 시스템은 우선 순위가 낮은 스레드(시간 조각 사용을 완료할 수 없음)를 실행하지 않고 우선 순위가 높은 스레드에 풀 타임 조각을 할당합니다. 자세한 내용은 컨텍스트 스위치을 참조하세요.

각 스레드의 우선 순위는 다음 조건에 따라 결정됩니다.

  • 프로세스의 우선 순위 클래스
  • 프로세스의 우선 순위 클래스 내에 있는 스레드의 우선 순위 수준

우선 순위 클래스와 우선 순위 수준이 결합되어 스레드의 기본 우선 순위 형성됩니다. 스레드의 동적 우선 순위에 대한 자세한 내용은 우선 순위 향상참조하세요.

우선순위 등급

각 프로세스는 다음 우선 순위 클래스 중 하나에 속합니다.

IDLE_PRIORITY_CLASS
보통보다 낮은 우선순위 클래스
정상 우선순위 클래스 (NORMAL_PRIORITY_CLASS)
보통보다 높은 우선순위 클래스
고우선순위_클래스
REALTIME_PRIORITY_CLASS

기본적으로 프로세스의 우선 순위 클래스는 NORMAL_PRIORITY_CLASS. CreateProcess 함수를 사용하여 자식 프로세스를 만들 때 자식 프로세스의 우선 순위 클래스를 지정합니다. 호출 프로세스가 IDLE_PRIORITY_CLASS 또는 BELOW_NORMAL_PRIORITY_CLASS 경우 새 프로세스는 이 클래스를 상속합니다. GetPriorityClass 함수를 사용하여 프로세스의 현재 우선 순위 클래스와 SetPriorityClass 함수를 확인하여 프로세스의 우선 순위 클래스를 변경합니다.

화면 보호기 또는 디스플레이를 주기적으로 업데이트하는 애플리케이션과 같이 시스템을 모니터링하는 프로세스는 IDLE_PRIORITY_CLASS 사용해야 합니다. 이렇게 하면 우선 순위가 높지 않은 이 프로세스의 스레드가 더 높은 우선 순위 스레드를 방해하지 않습니다.

주의하여 HIGH_PRIORITY_CLASS 사용합니다. 스레드가 오랜 기간 동안 가장 높은 우선 순위 수준에서 실행되는 경우 시스템의 다른 스레드는 프로세서 시간을 얻지 않습니다. 여러 스레드를 동시에 높은 우선 순위로 설정하면 스레드의 효율성이 떨어집니다. 우선 순위가 높은 클래스는 시간이 중요한 이벤트에 응답해야 하는 스레드용으로 예약되어야 합니다. 애플리케이션이 우선 순위가 높은 클래스가 필요한 작업을 수행하는 경우 나머지 작업이 정상 우선 순위인 경우 SetPriorityClass 사용하여 애플리케이션의 우선 순위 클래스를 일시적으로 높입니다. 그런 다음, 시간이 중요한 작업이 완료된 후 이를 줄입니다. 또 다른 전략은 모든 스레드가 대부분의 시간을 차단하여 중요한 작업이 필요할 때만 스레드를 각성하는 우선 순위가 높은 프로세스를 만드는 것입니다. 중요한 점은 우선 순위가 높은 스레드가 짧은 시간 동안 실행되어야 하며, 수행해야 하는 시간이 중요한 경우에만 실행되어야 한다는 것입니다.

마우스 입력, 키보드 입력 및 백그라운드 디스크 플러시를 관리하는 시스템 스레드를 중단하므로 REALTIME_PRIORITY_CLASS 거의 사용하지 않아야 합니다. 이 클래스는 하드웨어에 직접 "통신"하거나 중단이 제한되어야 하는 간단한 작업을 수행하는 애플리케이션에 적합할 수 있습니다.

우선 순위 수준

다음은 각 우선 순위 클래스 내의 우선 순위 수준입니다.

THREAD_PRIORITY_IDLE
스레드_우선순위_최저
THREAD_PRIORITY_BELOW_NORMAL (스레드 우선순위: 정상 아래)
스레드 우선순위: 일반 (THREAD_PRIORITY_NORMAL)
스레드_우선순위_보통_이상
스레드_우선순위_최고
스레드_우선순위_시간_중요

모든 스레드는 THREAD_PRIORITY_NORMAL 사용하여 만들어집니다. 즉, 스레드 우선 순위는 프로세스 우선 순위 클래스와 동일합니다. 스레드를 만든 후 SetThreadPriority 함수를 사용하여 프로세스의 다른 스레드를 기준으로 우선 순위를 조정합니다.

일반적인 전략은 프로세스의 입력 스레드에 THREAD_PRIORITY_ABOVE_NORMAL 또는 THREAD_PRIORITY_HIGHEST 사용하여 애플리케이션이 사용자에게 응답하도록 하는 것입니다. 백그라운드 스레드, 특히 프로세서 집약적인 스레드는 필요할 때 선점할 수 있도록 THREAD_PRIORITY_BELOW_NORMAL 또는 THREAD_PRIORITY_LOWEST로 설정할 수 있습니다. 그러나 일부 작업을 완료하기 위해 우선 순위가 낮은 다른 스레드를 기다리는 스레드가 있는 경우 대기 중인 우선 순위가 높은 스레드의 실행을 차단해야 합니다. 이렇게 하려면 대기 함수, 중요 섹션또는 Sleep 함수, SleepEx또는 SwitchToThread함수를사용합니다. 스레드가 루프를 실행하도록 하는 것이 좋습니다. 그렇지 않으면 우선 순위가 낮은 스레드가 예약되지 않으므로 프로세스가 교착 상태가 될 수 있습니다.

스레드의 현재 우선 순위 수준을 확인하려면 GetThreadPriority 함수를 사용합니다.

기본 우선 순위

프로세스 우선 순위 클래스와 스레드 우선 순위 수준이 결합되어 각 스레드의 기본 우선 순위를 형성합니다.

다음 표에서는 프로세스 우선 순위 클래스와 스레드 우선 순위 값의 조합에 대한 기본 우선 순위를 보여 줍니다.

프로세스 우선 순위 클래스 스레드 우선 순위 수준 기본 우선 순위
IDLE_PRIORITY_CLASS 스레드 우선순위 대기 상태 (THREAD_PRIORITY_IDLE) 1
스레드_우선순위_최저 (THREAD_PRIORITY_LOWEST) 2
스레드_우선순위_보통_이하 3
스레드 우선순위 보통 (THREAD_PRIORITY_NORMAL) 4
THREAD_PRIORITY_ABOVE_NORMAL 5
THREAD_PRIORITY_HIGHEST 6
THREAD_PRIORITY_TIME_CRITICAL (스레드 우선순위: 시간 중요) 15
BELOW_NORMAL_PRIORITY_CLASS THREAD_PRIORITY_IDLE 1
THREAD_PRIORITY_LOWEST (우선순위가 가장 낮은 스레드) 4
스레드_우선순위_보통_아래 5
THREAD_PRIORITY_NORMAL 6
THREAD_PRIORITY_ABOVE_NORMAL 7
THREAD_PRIORITY_HIGHEST 8
스레드 우선순위 - 시간 중요 15
NORMAL_PRIORITY_CLASS 쓰레드_우선순위_대기 1
THREAD_PRIORITY_LOWEST (쓰레드의 우선순위 중 가장 낮음) 6
쓰레드_우선순위_정상_이하 7
THREAD_PRIORITY_NORMAL 8
THREAD_PRIORITY_정상_이상 9
THREAD_PRIORITY_HIGHEST 10
THREAD_PRIORITY_TIME_CRITICAL 15
ABOVE_NORMAL_PRIORITY_CLASS 스레드_우선순위_대기 1
스레드_우선순위_가장낮음 8
스레드_우선순위_정상_아래 9
THREAD_PRIORITY_NORMAL 10
THREAD_PRIORITY_ABOVE_NORMAL 11
스레드_우선순위_최고 (THREAD_PRIORITY_HIGHEST) 12
THREAD_PRIORITY_TIME_CRITICAL (시간비판적) 15
HIGH_PRIORITY_CLASS 쓰레드_우선순위_유휴 1
스레드_우선순위_최하 11
스레드_우선순위_낮음 12
THREAD_PRIORITY_NORMAL (스레드 우선순위 보통) 13
THREAD_PRIORITY_ABOVE_NORMAL 14
THREAD_PRIORITY_HIGHEST 15
THREAD_PRIORITY_TIME_CRITICAL 15
REALTIME_PRIORITY_CLASS 스레드 우선순위 한가함 (THREAD_PRIORITY_IDLE) 16
스레드_우선_최저 22
스레드_우선순위_정상_아래 23
스레드_우선순위_보통 24
THREAD_PRIORITY_ABOVE_NORMAL 25
스레드_우선순위_최상위 26
스레드 우선순위 - 시간 중요 31