Thread의 개념
- 프로세스는 자원을 할당받고 그 자원을 제어함으로써 원하는 목적을 달성한다.
- 자원을 제어하기 위한 기능을 담당하는 것을 Thread라고 한다.
- 자원을 제어하는 Thread는 하나의 프로세스 내에서 여러개가 존재 할 수 있다.
자원과 Thread
-
위 그림을 보면 하나의 자원(코드, 전역데이터, 힙)에 대한 부분을 여러 Thread(Thread1, Thread2, ..., Thread n)가 공유하는 것을 알 수 있다.
-
즉, 하나의 프로세스가 자원을 할당받으면 해당 프로세스 내에서 작업의 실행단위인 여러 Thread가 각각 이 자원들을 공유하며 제어할 수 있다.
메모리 관점에서 Thread
- 같은 프로세스들의 Thread 들은 동일 주소공간 공유
- 여러 Thread 들은 각각의 작업영역(스택영역)을 할당받는다.
- Thread 들은 각 작업영역에서 지역 데이터를 만들고 그 안에서작업을 한다.
- 코드 영역에서 각 Thread 의 프로그램 포인터(PC)로 작업 흐름을 제어한다.
Single Thread vs Multi Thread
- 자원을 할당받은 프로세스가 하나의 스레드만 가지고 있을경우 단일 스레드 프로세스라고 한다.
- 자원을 할당받은 프로세스가 자원을 공유하는 여러개의 프로세스를 가지고 있을경우 멀티 스레드 프로세스라고 한다.
Thread의 특징
- Light Weight Process(LWP)
- 프로세스는 자원+제어 의 개념으로 이루어져 있지만 Thread는 자원을 공유하기 때문에 제어의 개념만 가지고 있어 일반 프로세스보다 가볍기 때문에 LWP 라고 불리기도 한다.
- 프로세서 활용의 기본 단위
- CPU를 활용하는 기본 단위로 Thread가 여러개면 프로세서 여러개를 동시에 사용이 가능하다.
- 구성요소
- Thread ID
- Register Set (SP, PC 등) : 제어를 위한 Set
- Stack (i.e.local data) : 자신만의 작업영역
- 제어 요소 외 코드, 데이터 및 자원들은 동일 프로세스의 다른 Thread 들과 공유
- 전통적 프로세스 = 단일 Thread 프로세스
스레드의 장점
- 사용자 응답성
- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리가 가능하다.
- 자원 공유
- 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있다.)
- 경제성
- 프로세스의 생성, context switch에 비해 효율적이다.
- 멀티 프로세서(processor) 활용
스레드의 장점 - 사용자 응답성
[다중 스레드를 통한 워드 편집기 프로세스]
- 입출력 발생시 프로세스는 작업을 중지한다.
- 사용자가 키보드를 입력할경우 이미지나 텍스트를 보여주는 작업은 동작하지 못한다.
- 이를 해결하기 위해서 여러 스레드로 나누어 각각의 작업을 스레드에 할당하여 사용하게 하면 모든 작업을 동시에 사용가능하다.
스레드의 장점 - 자원공유, 경제성
- 프로세스는 하나의 자원을 공유하지 못한다.
- 여러 프로세스가 하나의 자원을 번갈아 가면서 사용하기 위해 context switch 가 발생한다. context switch는 커널이 개입하는 매우 비싼 연산이기 때문에 되도록이면 사용을 피하는것이 좋다.
- 같은 프로세스내의 멀티 스레드는 자원을 공유하기 때문에 자원을 보다 효율적으로 사용이 가능하다.
스레드의 장점 - 멀티 프로세서 활용
- Thread 는 프로세서(processor)를 활용하는 기본 단위이다.
- 여러개의 Thread를 사용하면 여러개의 CPU 코어를 동시에 사용할 수 있다.
- 병렬처리를 통해 성능 향상이 가능하다.
[관련 면접질문]
쓰레드란?
쓰레드의 특징
쓰레드의 장점
프로세스와 쓰레드의 차이
멀티 프로세스와 멀티 쓰레드의 특징
멀티 프로세스 대신 멀티 쓰레드를 사용하는 이유는?
멀티쓰레드의 동시성과 병렬성에 대해 설명
멀티 쓰레드 환경에서의 주의사항
[Reference]
운영체제 강의자료 - 한국기술대학교(김덕수)
운영체제 강의 - 한국기술대학교(김덕수)