티스토리 뷰

프로그래밍/MFC

MFC 멀티스레드

에어버스 2016. 7. 10. 17:44
MFC 멀티스레드

멀티태스킹 : 하나의 CPU가 여러개의 Process를 교대로 수행 - OS에서 관리

멀티스레딩 : 하나의 CPU가 여러개의 스레드를 교대로 수행 - 프로그램에서 관리

프로세스 > 스레드
하나의 프로세스에는 여러개의 스레드가 존재할 수 있다.

윈도우는 멀티태스킹과 멀티스레딩을 지원한다.

하나의 프로세스가 생성한 스레드는 모두 동일한 우선 순위 클래스를

<OS에서 제공하는 프로세스 우선 순위 클래스>

1. REALTIME_PRIORITY_CLASS             실시간
2. HIGH_PRIORITY_CLASS                   높음
3. ABOVE_NORMAL_PRIORITY_CLASS    보통초과 (윈도우2000/XP)              
4. NORMAL_PRIORITY_CLASS               보통
5. BELOW_NORMAL_PRIORITY_CLASS    보통미만 (윈도우2000/XP)
6. IDEL_PRIORITY_CLASS                        낮음

<같은 프로세스에 속한 스레드 사이에서 우선순위 레벨>

1. THREAD_PRIORITY_TIME_CRITICAL
2. THREAD_PRIORITY_HIGHEST
3. THREAD_PRIORITY_ABOVE_NORMAL
4. THREAD_PRIORITY_NORMAL
5. THREAD_PRIORITY_BELOW_NORMAL
6. THREAD_PRIORITY_LOWEST
7. THREAD_PRIORITY_IDLE

우선순위 클래스와 우선순위 레벨을 결합하여 스레드의 기초 우선순위가 결정되며 이 값이 CPU 스케줄링에 사용된다.

이러한 방식을 따르면 우선순위가 높은 스레드가 계속 CPU 시간을 요구할 경우 우선순위가 낮은 스레드는 CPU 시간을 할당받지 못하는 문제가 있다. 이런 상황을 기아(Starvation)라고 한다.
기아 문제를 해결하기 위해 윈도우는 스레드 우선순위를 상황에 따라 동적으로 바꿈으로써 낮은 우선순위 스레드도 궁극적으로 CPU를 사용할 수 있게 만든다. 또한 현재 사용자가 작업하고 있는 프로그램의 반응 속도를 빠르게 하기 위해 동적으로 우선순위를 변화시키기도 한다. 예로 2개의 그림판이 실행중일때 사용자가 작업하고 있는 위쪽 프로그램의 스레드가 좀 더 높은 우선 순위를 갖게 된다.

- 스레드 동기화

멀티스레드를 사용하는 프로그램에서 2개 이상의 스레드가 공유 데이터를 접근하는 경우 다양한 문제가 발생할 수 있다. 이런 문제를 해결하는 일련의 작업을 말한다.

윈도우는 다양한 API를 제공하여 프로그래머가 상황에 따라 적절한 동기화 방법을 선택할 수 있도록 한다.
동기화 관련 문제는 사용자가 작성한 코드는 물론이고, C/C++ 라이브러리에사도 발생할 수 있다.
멀티스레드를 사용하는 응용프로그램에서는 Multithreaded~가 포함된 것을 선택하는것이 안전하다.

MFC 프로젝트 기본값은 디버그 모드에서는 '다중 스레드 디버그 DLL', 릴리즈 모드에서는 '다중 스레드 DLL'이 기본값이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30