프로세스, 스레드의 우선순위

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
admin