# Thread

## 쓰레드란 무엇인가요?

* **쓰레드는 CPU 사용의 기본 단위로, 프로세스 내에서 실행되는 여러 흐름의 단위를 말한다.**
* 쓰레드는 쓰레드 ID, 프로그램 카운터, 레지스터 세트 및 스택으로 구성된다.
* 운영체제는 자원을 효율적으로 사용하려고 한다. 쓰레드를 사용하면 프로세스보다 생성할 때 오버헤드도 적고 공유된 자원에 대해서도 오버헤드가 적다. 그리고 쓰레드를 이용하면 병렬성을 높일 수 있다.

\\

## 쓰레드의 특징을 설명해 주세요.

* 쓰레드는 프로세스 내에서 각각 **Stack**만 따로 할당받고 `Code`, `Data`, `Heap` 영역은 공유한다.
* 프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행된다.
* 같은 프로세스 안에 있는 여러 쓰레드들은 같은 힙 공간을 공유하는 반면, 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
* 각각의 쓰레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
* 한 쓰레드가 프로세스 자원을 변경하면, 다른 이웃 쓰레드(`sibling thread`)도 그 변경 결과를 즉시 볼 수 있다.
* **프로세스 외부에는 쓰레드가 존재하지 않는다.**

\\

## 쓰레드의 장단점은 무엇인가요?

* **장점**
  * 쓰레드는 프로세스보다 생성 및 종료시간, 쓰레드간 전환 시간이 짧다.
  * 쓰레드는 프로세스의 메모리, 자원 등을 공유하므로 커널의 도움 없이 상호 간의 통신이 가능하다.
* **단점**
  * 쓰레드 중 하나만 문제가 있어도 전체 프로세스가 영향을 받는다.
