멀티프로세스 기반 프로그램의 한계 -----------------------------------------------------------------------------
둘 이상의 서로 다른 프로그램을 실행하기 위해서는 당연히 둘 이상의 프로세스를 각각의 메모리영역을 메인메모리에 할당해야 한다. 또한 하나의 프로그램이 두가지 이상의 일을 동시(정확히는 동시가 아니지만)에 처리하기 위해서도 둘 이상의 프로세스가 필요하다.
하지만 이는 필연적으로 많은 횟수의 컨텍스트 스위칭(프로세스가 전환될 때마다 프로세스의 데이터를 CPU에 옮기는 작업)으로 인해서 성능 저하가 올수가 있기 때문이다.
그럼 이를 위한 해결책이 무엇일까? 단순하다. 컨텍스트 스위칭의 횟수를 줄이거나 정보의 개수를 줄이면 된다.
탄생 쓰레드! ------------------------------------------------------------------------------------------------
1. 쓰레드는 하나의 프로그램 내에서 여러개의 실행흐름을 두기 위한 모델이다.
2. 쓰레드는 각 실행흐름을 위한 메모리가 프로세스처럼 완벽한 독립구조가 아니다. 쓰레드들 사이에는 공유하는 요소가 존재한다.
3. 쓰레드는공유하는 요소가 있는 관계로 컨텍스트 스위칭에 걸리는 시간이 프로세스보다 짧다.
쓰레드의 특성! -----------------------------------------------------------------------------------------------
1. 쓰레드마다 스텍을 독립적으로 생성한다.
-> 함수호출시 필요한 메모리 공간을 독립하면서 실행흐름을 추가시킬수 있는 최소한의 조건을 만족시킨다.
2. 코드 영역을 공유한다.
-> CPU는 당연히 필요한 종류의 명령어만 가지게 된다. 하지만 두개의 프로세스가 서로 다른 명령어를 가지고 있다면 당연히 프로세스 끼리는 각기 실행흐름을 실행 시킬 수 없다.
하지만 쓰레드는 2개의 쓰레드에 있는 모든 명령어 종류를 공유함으로서 그 문제를 해결한다.
만약 MAIN프로세스가 있고 그 아래로 A쓰레드와 B쓰레드가 존재한다고 하면 각 쓰레드의 메인함수또한 마치 명령어 처럼 호출이 가능한 상태로 코드 영역에 등록된다.
3. 데이터 영역과 힙을 공유한다.
서로간의 데이터와 힙 영역을 공유하기 때문에 힙이나 데이터 영역에 메모리 공간을 할당해서 서로 통신하는 것이 가능하다.
C++의 관점으로 본다면 전역변수와 NEW연산자를 통해서 동적 할당된 메모리 공간은 공유가 가능하다.
하지만 이것은 장점만 있는 것이 아니다. 동기화 문제를 통해서 프로그램에 오작동을 일으킬 여지도 도사리고 있다.
'게임개발공부 > 서적공부' 카테고리의 다른 글
윈도우 시스템 프로그래밍 <쓰레드 생성> (0) | 2013.11.16 |
---|---|
윈도우 시스템 프로그래밍 <쓰레드의 진실> (0) | 2013.11.16 |
윈도우 시스템 프로그래밍 <프로세스와 스케줄링> (0) | 2013.11.16 |
윈도우 시스템 프로그래밍 < IPC 프로세스간 통신 > (0) | 2013.11.16 |
윈도우 시스템 프로그래밍 <커널오브젝트> (0) | 2013.11.16 |