TL;DR

스레드는 하나의 프로세스 안에서 실행되는 실행 흐름이다. 운영체제 수준 스레드는 같은 프로세스의 주소 공간을 공유하되, 각자 stack과 실행 상태를 가진다.

스레드

스레드는 프로세스 내부에서 실제 작업을 수행하는 실행 흐름이다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다. 이 노트는 기본적으로 POSIX/Linux의 운영체제 수준 스레드를 기준으로 설명한다.

운영체제 수준 스레드는 커널 스케줄러가 CPU에 올려 실행하는 단위다. 같은 프로세스 안의 다른 스레드와 code, data, heap 영역을 공유한다. 반면 각 스레드는 자신의 실행 흐름을 유지하기 위해 별도의 stack, 레지스터 상태, [[프로그램 카운터]] (PC)를 가진다.

이 구조 때문에 스레드는 명시적인 [[IPC]] 없이 같은 주소 공간을 통해 협력할 수 있다. 하지만 [[공유 메모리]]는 동시에 위험 요소이기도 하다. 여러 스레드가 같은 데이터를 동시에 읽고 쓰면 [[race condition]]이 생길 수 있고, 이를 막으려면 [[lock]], thread-safe [[queue]], [[condition variable]] 같은 동기화 장치가 필요하다.

스레드의 핵심 성질은 공유다. 공유 덕분에 가볍고 빠르게 협력할 수 있지만, 그만큼 데이터 일관성과 동기화 책임을 고려해야 한다.


References


Connections