[출처] 스레드 모델(Thread Model)|작성자 표효찬
http://blog.naver.com/gouhc46?Redirect=Log&logNo=60144278990
-------------------------------------------
고전적인 스레드 모델
프로세스를 바라보는 관점
1. 서로 관련된 자원을 한 군데로 모은다.(address space, code, data, etc...)
2. 실행의 흐름(thread)
=> 결국 프로세스는 자원을 한 군데로 모으고, 스레드는 CPU에서 실행되는 것
여러개의 스레드가 하나의 프로세스에서 병렬로 수행되는 것은, 여러개의 프로세스가 하나의 컴퓨터에서 병렬로 수행되는 것과 유사하다
스레드의 경우는 한 프로세스 안에 들어있는 스레드들이 주소공간과 자원들을 공유한다.
프로세스의 경우는 한 컴퓨터 안에 들어있는 프로세스들이 메모리, 디스크, 등을 공유한다.
스레드는 프로세스의 일부 속성을 가지고 있기 때문에 경량프로세스(lightweight process)라고 불린다.
* multi-threading : 여러 스레드가 하나의 프로세스 안에서 수행되는 것이 가능한 시스템
스레드와 프로세스를 다시 비교하자면, 프로세스는 자신의 주소공간과 실행의 흐름을 한 개씩 갖는 반면, 스레드는 주소공간을 공유한다.
다중스레드 프로세스가 하나의 CPU를 가진 시스템에서 실행될 때 스레드는 순서대로 수행된다. 예를 들어, 3개의 스레드가 있으면, 하나씩 순서대로 CPU에서 실행되며, CPU의 1/3 속도를 갖는 CPU 세 개에서 병렬로 수행되는 것처럼 보이게 된다.
모든 스레드는 동일한 주소공간을 공유하며, 이는 전역변수를 공유하는 것이다. 모든 스레드들은 주소공간을 공유하기 때문에, 스레드는 다른 스레드의 스택을 읽고, 쓰고 지울 수 있다. 프로세스끼리는 CPU를 점유하기 위하여 서로 경쟁하지만, 스레드끼리는 서로 협력하여 작업을 수행한다.
프로세스 당 가지고 있는 자원 : 주소공간, 전역변수, 열린 파일들, 자식 프로세스들, 대기중인 alarm, 시그널과 핸들러, 등등
스레드 당 가지고 있는 자원 : PC, 레지스터, 스택, 현재상태(실행, 대기, 종료 등)
스레드의 전이 단계를 살펴보면, 실행(running), 대기(block), 준비(ready), 종료(terminate) 단계가 있다.
실행 : 스레드가 CPU를 점유하여 수행중이다.
대기 : 대기상태로 풀릴때까지 기다리는 중이다.
준비 : 다음 차례에 수행 될 수 있다.
시스템콜을 이용하여 키보드로부터 입력을 받으려고 하는 상태는 대기 상태가 되고 입력이 들어오면 깨어난다.
외부 이벤트가 발생하거나, 다른 스레드가 자신을 깨워줄 수 있다.
스레드는 자신만의 고유한 스택을 갖는다. 예를 들어, A, B, C 스레드가 존재한다고 가정하고, A가 B를, B가 C를 호출했다고 하면, 각각의 스레드들은 서로 다른 실행 히스토리를 갖는다. 이 점이 스레드 당 고유한 스택을 가져야 하는 이유이다.
POSIX 스레드 모델
POSIX에서 제공하는 스레드 함수
pthread_create : 스레드 생성
pthread_exit : 스레드 종료
pthread_join : 새로운 스레드를 생성했을 때, 생성된 스레드가 종료될 때까지 기다린다.
pthread_yeild : 스레드가 충분히 오래 CPU를 사용하여 점유를 다른 스레드에게 넘긴다.
User-Level 스레드 모델
Kernel-Level 스레드 모델
하이브리드 스레드 모델
'Thread > 팁' 카테고리의 다른 글
[Thread] Thread Pooling - prototype (0) | 2014.10.11 |
---|---|
[Thread Tip] java 스레드 기본 관련해서 잘 정리된 사이트 (0) | 2014.04.25 |
[Thread] Thread Safe (0) | 2013.12.28 |
[Thread] spin lock에 대한 글 - (김남형 멘토님 블로그 링크) (0) | 2013.10.21 |
[스크랩] 멀티스레딩에 대한 간단한 설명 (0) | 2012.10.22 |
[스크랩] 스레드 실행 예 (0) | 2012.10.22 |