쓰레드는 CPU 사용의 기본 단위로, 프로세스 내에서 실행되는 여러 흐름의 단위를 말한다.
쓰레드는 쓰레드 ID, 프로그램 카운터, 레지스터 세트 및 스택으로 구성된다.
운영체제는 자원을 효율적으로 사용하려고 한다. 쓰레드를 사용하면 프로세스보다 생성할 때 오버헤드도 적고 공유된 자원에 대해서도 오버헤드가 적다. 그리고 쓰레드를 이용하면 병렬성을 높일 수 있다.
쓰레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다.
Code
Data
Heap
프로세스 내의 주소 공간이나 자원들(힙 공간 등)을 같은 프로세스 내에 쓰레드끼리 공유하면서 실행된다.
같은 프로세스 안에 있는 여러 쓰레드들은 같은 힙 공간을 공유하는 반면, 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없다.
각각의 쓰레드는 별도의 레지스터와 스택을 갖고 있지만, 힙 메모리는 서로 읽고 쓸 수 있다.
한 쓰레드가 프로세스 자원을 변경하면, 다른 이웃 쓰레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있다.
sibling thread
프로세스 외부에는 쓰레드가 존재하지 않는다.
장점
쓰레드는 프로세스보다 생성 및 종료시간, 쓰레드간 전환 시간이 짧다.
쓰레드는 프로세스의 메모리, 자원 등을 공유하므로 커널의 도움 없이 상호 간의 통신이 가능하다.
단점
쓰레드 중 하나만 문제가 있어도 전체 프로세스가 영향을 받는다.
Last updated 3 months ago