OS Thread Basics

스레드 공유 자원과 동시성/병렬성 구분

스레드는 같은 프로세스 안에서 주소 공간과 파일 같은 자원을 공유하지만 스택과 레지스터, 실행 흐름은 각자 가진다.

01

프로세스 안 실행 흐름

스레드는 하나의 프로세스 자원 안에서 독립적인 실행 위치와 호출 스택을 가진다.

thread of execution
02

공유 자원 접근

heap과 전역 데이터는 함께 보이므로 빠른 통신이 가능하지만 race condition도 생긴다.

shared memory
03

동시성

하나의 코어에서도 여러 작업이 번갈아 진행되면 동시성이 생긴다.

interleaving
04

병렬성

여러 코어에서 실제 같은 시간에 실행되면 병렬성이 생긴다.

multi-core
장점
프로세스보다 생성과 전환이 가볍고 공유 메모리 통신이 빠르다. 서버 요청 처리와 UI 반응성 유지에 자주 쓰인다.
lightweight
위험
공유 상태 때문에 race, deadlock, visibility 문제가 생긴다. 동기화 규칙이 없으면 버그가 재현하기 어렵다.
hard bugs
선택
CPU 병렬성, I/O 대기 숨김, 구조 분리 중 어떤 목적이 큰지 먼저 정한다. 목적 없이 스레드를 늘리면 복잡도만 늘어난다.
purpose first

스레드 개념 확인

공유/고유 스택은 스레드별, heap은 프로세스 내 공유라는 차이를 설명할 수 있다.
동시/병렬 interleaving과 simultaneous execution을 구분한다.
동기화 공유 데이터를 바꾸는 모든 경로에 보호 규칙이 있다.

자원 구분

shared: code, heap, globals, file descriptors
per-thread: stack, registers, program counter