Thread와 Thread 스케줄링
Thread 의 우선순위를 지정하는 방법에 대해서 공부해보겠습니다!
우선 Thread 에 대해서 알아야겠죠?
Thread 란 병렬적으로 여러개의 작업을 하기 위해 프로세스를 여러개의 Thread 로 나누어 작업을 수행하게 합니다.
쓰레드는 한번에 하나씩 동작할 수 있으므로 어떤 Thread 가 먼저 실행될 지는 아무도 알지 못합니다.
따라서 우선순위를 지정하여 Thread 의 스케줄링을 도울 수 있습니다.
그럼 우선순위를 지정하는 함수의 원형을 먼저 살펴보겠습니다.
BOOL WINAPI SetThreadPriority( _In_ HANDLE hThread, _In_ int nPriority );
Parameter 의 의미를 살펴보겠습니다.
HANDLE hThread [in]
: 우선순위 값을 설정할 스레드의 핸들.
*핸들은 THREAD_SET_INFORMATION or THREAD_SET_LIMITED_INFORMATION 의 접근 권한이 반드시 있어야 합니다*
nPriority [in]
: Thread 의 우선순위 값
Priority |
Meaning |
THREAD_MODE_BACKGROUND_BEGIN |
백그라운드 처리 모드 시작, 우선 순위를 낮추어 백그라운드 작업을 수행하게 한다. hThead 가 현재 Thread 핸들인 경우에만 지정할 수 있음, 이미 백그라운드 모드면 실패 |
THREAD_MODE_BACKGROUND_END |
백그라운드 처리 모드 종료. 백그라운드 처리 모드로 들어가기 전 우선순위로 복원시킴. hThead 가 현재 Thread 핸들인 경우에 지정 가능, hThead 가 백그라운드 처리 모드가 아니면 실패 |
THREAD_PRIORITY_ABOVE_NORMAL |
보통보다 조금 높은 우선순위 |
THREAD_PRIORITY_BELOW_NORMAL |
보통보다 조금 낮은 우선순위 |
THREAD_PRIORITY_HIGHEST |
가장 높은 우선순위 |
THREAD_PRIORITY_IDLE |
가장 낮은 우선순위보다 더 낮은 우선순위 |
THREAD_PRIORITY_LOWEST |
가장 낮은 우선순위 |
THREAD_PRIORITY_NORMAL |
보통 |
THREAD_PRIORITY_TIME_CRITICAL |
가장 높은 우선순위보다 더 높은 우선순위 |
Thread 의 우선순위를 지정하여 스케줄링을 도울 수 있습니다.
*모든 Thread 는 기본적으로 THREAD_PRIORITY_NORMAL 으로 우선순위가 설정되어 있음을 참고하세요*