쓰레드(Thread)란
- CPU의 제어 흐름
- 실행 단위
- 한 프로세스 내부에서 스케줄링이 가능한 개체
- 프로세스 내부에 존재하며, 기본적으로 하나의 프로세스 안에는 반드시 하나의 쓰레드가 존재함.
- 다중 쓰레드를 제공하는 OS의 프로세스는 하나 이상의 쓰레드로 구성되어 있음.
- 프로세스 내부에 다수의 쓰레드를 이용해 쓰레드 단위로 CPU를 할당함
- 단일 쓰레딩이 아닌 다중 쓰레딩의 경우, 쓰레드 단위로 스케줄링하여 CPU를 할당하기 때문에 프로세스 내부의 쓰레드를 반드시 구분할 필요가 있음.
- 프로세스와 같이 생명주기를 가지고 있고, 쓰레드 단위로 스케줄링하여 CPU 할당
- 데이터를 공유함으로써 자원 소모가 줄고, 문맥교환이 빨라짐으로써 프로그램 응답시간이 줄어듬
- 프로세스간 통신 방법보다는 프로세스 안의 쓰레드간 통신이 훨씬 간단함
- 쓰레드를 여러개 사용하게 되면 미묘한 시간차나 변수 공유로 인해 오류가 발생할 수 있음.
단일 쓰레딩과 멀티 쓰레딩의 차이
-
단일 쓰레딩
- 쓰레드를 2개 만드려면 프로세스 2개 필요.
- 쓰레드가 2개인 경우 코드, 데이터, 스택영역을 전부 혼자 사용하게 됨(독립적)
-
멀티 쓰레딩
-
1개의 프로세스에 2개 이상의 쓰레드를 만들어 관리할 수 있음.
-
코드, 스택영역은 쓰래드별로 독립적이나, 데이터 영역은 공유할 수 있음
(프로세스 내의 자원을 공유함)
- 쓰레드 관리에 필요한 정보량은 프로세스 관리에 필요한 정보량보다 상대적으로 적기 때문에 문맥교환에 있어 처리시간이 적어지게 됨.
-
이러한 관점에서 프로세스를 중량 프로세스, 쓰레드를 경량 프로세스라 부름
- 프로세스는 실행중인 프로그램, 쓰레드는 프로세스 안에 존재하는 실행 흐름의 단위.
- 프로세스는 프로세스간에 별개의 메모리는 사용, 쓰레드는 프로세스 내의 데이터영역을 공유해 사용
- 프로세스간의 문맥교환보다 쓰레드간의 문맥교환이 더 빠름.
- 멀티 쓰레드는 동일한 일을 처리할 때 효율적.
donate.html