
스레드란?
- 프로세스가 할당받은 자원을 이용하는 실행의 단위
- 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 Heap, Data, Code 영역을 공유 (멀티 스레드의 경우, 이 프로세스의 영역들을 공유한다)
- 하나의 프로세스 안에서 작업을 담당하는 최소 실행 단위
ex) 브라우저(프로세스)에서 파일 다운로드(스레드), 유튜브시청(스레드)
- 멀티 스레딩의 경우, 스레드 간의 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시킨다.
- 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 고유한 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택을 가지고 있다.
멀티 스레드
- 멀티 스레드는 CPU의 최대 활용을 위해 프로그램의 둘 이상을 동시에 실행하는 기술이다.

이러한 작업은 컨텍스트 스위칭 (Context Switching)을 통해서 이뤄진다. 위의 이미지에서 하나의 스레드에서 다음 스레드로 이동을 하면서 컨텍스트 스위칭이 일어난다. 그리고, 스위칭이 일어나면서 부분적으로 조금씩 각각의 스레드에 대한 작업을 끝내게 된다.
-> context switching이 엄청 빠르게 일어나면서, 사용자의 시선에서는 프로그램들이 동시에 수행되는 것처럼 보인다.
