728x90
반응형
이전에 프로세스에 대해 살펴보면서, Context Switch의 비용이 만만치 않기에 이를 줄이는 것이 중요하다고 했었다.
이에 등장했던 개념이 thread였는데, 이번에 한 번 살펴보자!
프로세스(Process)와 스레드(Thread)
프로세스는 자원을 할당받고, 자원을 제어하여 목적을 달성한다.
여기서 제어만 따로 떼어둔 것을 스레드라고 한다. 하나의 프로세스 안에 여러 스레드가 있을 수 있다(제어가 여러 개 있는 것)
Thread란?
- LWP(Light Weight Process)라고도 한다
- 프로세서 활용의 기본 단위이다.
- 구성요소
- Thread ID
- Register set (PC(program counter), SP(stack point))
- Stack (지역 데이터)
- 프로세스의 코드, 데이터, 힙의 자원들은 프로세스 내 다른 스레드들과 공유한다 (즉, 자원을 공유하지만 자신만의 제어요소를 가지고 있다)
Thread의 장점
- 사용자 응답성
- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리할 수 있다
- 자원 공유
- 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)
- 경제성
- 프로세스의 생성, context switch에 비해 효율적
- 멀티 프로세서 활용
- 병렬처리를 통한 성능 향상 (여러 개의 CPU코어를 사용할 수 있음)
Thread의 구현
사용자 수준 스레드
사용자 영역의 스레드 라이브러리로 구현된다. 라이브러리는 스레드의 생성, 스케줄링을 담당한다. (POSIX threads, Win32 threads등)
커널은 스레드의 존재를 모르는데, 이에 대한 장단점이 존재한다.
- 장점
- 커널의 관리(개입)을 받지 않아 스레드의 생성 및 관리의 부하가 적고 유연하게 관리할 수 있다.
- 라이브러리만 있는 플랫폼이라면 그대로 프로그램을 사용할 수 있다는 점에서 이식성이 높다.
- 단점
- 커널은 프로세스 단위로 자원을 할당하기 때문에, 하나의 스레드가 block 상태가 되면, 프로세스도 block 상태가 되고, 이에 모든 스레드가 대기하게 된다 (single threaded kernel의 경우, 커널 스레드와 프로세스가 1:1 매핑관계이기 때문에 프로세스가 block되면 커널 스레드도 자연스레 대기하게 됨)
커널 수준 스레드
- OS(커널)가 직접 관리한다
- 장점
- 커널이 각 스레드를 개별적으로 관리 (TCB가 커널 영역에 존재)
- 프로세스 내 스레드들이 병행 수행 가능
- 하나의 스레드가 block되어도 다른 스레드는 계속 작업을 수행할 수 있다
- 프로세스 내 스레드들이 병행 수행 가능
- 커널이 각 스레드를 개별적으로 관리 (TCB가 커널 영역에 존재)
- 단점
- 커널 영역에서 스레드의 생성, 관리
- context switching등 부하(overhead)가 크다
- 커널 영역에서 스레드의 생성, 관리
Multi-Threading Model
- N:1 모델 (사용자 수준 스레드)
- 1:1 모델 (커널 수준 스레드)
>> 단점들을 보완해서 등장한게 N:M(다대다 모델)의 형태를 가지는 혼합형 스레드이다!
혼합형 스레드
- N개의 사용자 수준 스레드와 M개의 커널 수준 스레드를 가진다. (N은 항상 M보다 커야한다.)
- 사용자는 원하는 N개 만큼 사용자 수준 스레드를 사용한다
- 커널 스레드는 할당된 하나의 사용자 스레드가 block 상태가 되어도, 다른 할당된 사용자 스레드를 수행할 수 있다 (= 병행 처리)
- 효율적이면서도 유연한 방식
Ref: https://www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=8
728x90
반응형