프로세스, 스레드의 우선순위
Server/Winodw Network 2015. 10. 8. 23:22
모든 프로세스는 우선순위 클래스를 가지고 있다.
모든 스레드는 프로세스 우선 순위 클래스 안에서 상대적인 우선순위를 갖는다.
CreateProcess함수를 사용해서 생성된 프로세스는 기본 우선순위 클래스를 갖는다.
모든 프로세스는 자신의 우선순위 클래스를 낮출 수 있다.
BOOL SetPriorityClass( HANDLE hProcess, DWORD fdwPriority );
-> 자신이나 다른 프로세스의 우선순위 클래스를 조정할 수 있다.
DWORD GetPriorityClass( HANDLE hProcess );
-> 자신이나 다른 프로세스의 우선순위 클래스를 확인할 수 있다.
스레드는 프로세스 우선순위 클래스 안에서 상대적인 우선순위값을 조정할 수 있다.
이런 방법으로 시스템 스케줄러가 각 스레드에 할당하는 시간을 조절한다.
BOOL SetThreadPriority( HANDLE hThread, int nPriority );
-> 스레드의 기본 우선순위를 변경하는 함수
- 핸들을 갖고 있는 모든 스레드의 우선순위를 조절할 수 있다.
hThread
- 상대적인 우선순위를 설정할 스레드의 핸들이나 현재 스레드의 가상 핸들
nPriority
THREAD_PRIORITY_LOWEST
: 스레드 우선순위를 프로세스 우선순위 클래스보다 2단계 밑으로 내림
THREAD_PRIORITY_BELOW_NORMAL
- 스레드 우선순위를 프로세스 우선순위 클래스보다 1단계 밑으로 내림
THREAD_PRIORITY_NORMAL
- 스레드 우선순위와 프로세스 우선순위클래스를 같게 한다.
THREAD_PRIORITY_ABOVE_NORMAL
- 한단계 위로 올린다.
THREAD_PRIORITY_HIGHEST
- 2단계 위로 올린다.
THREAD_PRIORITY_IDLE
- 프로세스의 우선순위와 상관없이 스레드의 우선순위를 1로 한다.
THREAD_PRIORITY_TIME_CRITICAL
- 프로세스 우선순위 클래스가 REALTIME_PRIORITY_CLASS 가 아니면
스레드의 우선순위를 15로 한다.
REALTIME_PRIORITY_CLASS 라면 31로 한다.
스레드의 기본 우선순위를 알기 위한 함수
int GetThreadPriority( HANDLE hThread );
함수 성공 시 : 스레드의 기본 우선순위 레벨 나타낸다.
성공 시 리턴값은 SetThreadPriority의 nPriority 매개변수로 넘겨줄 수 있다.
** 프로세스가 시스템에서 제거되는 2가지 조건
1.....
- 프로세스 커널 객체에 대한 레퍼런스 카운트가 0이다.
- 프로세스 커널 객체에 열린 핸들이 하나도 없다는 뜻이다.
2.....
- 프로세스 안에 살아있는 스레드가 하나도 없음
'Server > Winodw Network' 카테고리의 다른 글
Overlapped 모델(1) (0) | 2015.10.25 |
---|---|
스레드의 우선순위 컨트롤 (0) | 2015.10.12 |
스레드 생성과 종료 (0) | 2015.10.06 |
프로세스와 스레드 (0) | 2015.10.05 |
로그 기록 (0) | 2015.09.23 |