2025-09-28 18:24
스레드 (Thread)
-
프로세스 내에서 실행되는 가장 작은 단위로, 자원을 공유하며 동시에 여러 작업을 처리해 프로그램 효율성을 극대화합니다.
-
프로세스의 자원(코드, 데이터, 힙)을 공유하지만,
-
각 스레드는 자신만의 호출 스택, 레지스터, 프로그램 카운터를 가져 독립적으로 작동
-
여러 스레드를 사용할 때 발생할 수 있는 교착 상태나 경쟁 상태 같은 동기화 문제를 해결하기 위해 뮤텍스, 세마포어 등의 기법
-
프로세스(Process):
- 운영체제로부터 자원을 할당받는 작업의 단위.
- 실행 중인 프로그램의 인스턴스.
- 공장(Factory)에 비유할 수 있습니다.
-
스레드(Thread):
- 프로세스가 할당받은 자원을 이용하여 실제로 작업을 수행하는 실행의 단위.
- 공장 안에서 일하는 작업자(Worker)에 비유할 수 있습니다.
-
하나의 프로세스는 반드시 하나 이상의 스레드를 가지며, 이를 ‘메인 스레드(Main Thread)‘라고 부릅니다.
- 필요에 따라 여러 개의 스레드를 추가로 생성하여 멀티스레딩 환경을 구축할 수 있습니다.
-
스레드는 프로세스 생성보다 훨씬 적은 비용으로 생성될 수 있고,
| 구분 | 공유 자원 (프로세스 단위) | 독립 자원 (스레드 단위) |
|---|---|---|
| 메모리 | Code 영역, Data 영역, Heap 영역 | Stack 영역 |
| 실행 상태 | 프로세스의 파일 디스크립터, PID 등 | 프로그램 카운터(PC), 레지스터, 스레드 ID |
| 비유 | 공용 주방 시설, 공용 냉장고 | 개인 작업대, 개인 요리 도구, 개인 레시피 북 |
- 공유 자원 중에서 한 번에 하나의 스레드만 접근해야 하는 부분을 임계 구역(Critical Section) 이라고 부르며,
- 동기화는 이 임계 구역을 보호하는 기술
주요 동기화 기법
- 뮤텍스(Mutex, Mutual Exclusion)
- ‘상호 배제’라는 뜻으로, 임계 구역에 오직 하나의 스레드만 들어갈 수 있도록 하는 잠금(Lock) 메커니즘입니다.
- 화장실에 사람이 있으면 문을 잠그고, 나오면 잠금을 푸는 것과 같습니다.
- 스레드는 임계 구역에 들어가기 전 락을 획득(acquire)하고, 나올 때 락을 해제(release)합니다.
- ‘상호 배제’라는 뜻으로, 임계 구역에 오직 하나의 스레드만 들어갈 수 있도록 하는 잠금(Lock) 메커니즘입니다.
- 세마포어]
- 뮤텍스가 하나의 스레드만 허용하는 화장실이라면, 세마포어는 여러 칸이 있는 공용 화장실과 같습니다.
- 동시에 접근 가능한 스레드의 수를 지정할 수 있습니다.
- 예를 들어, 동시에 3개의 스레드만 접근 가능한 자원이 있다면 세마포어 카운터를 3으로 설정합니다.
- 스레드가 접근할 때마다 카운터를 1씩 줄이고, 0이 되면 다른 스레드들은 대기해야 합니다.
- 스레드가 작업을 마치면 카운터를 다시 1 늘립니다.
- 모니터]
- 뮤텍스와 조건 변수(Condition Variable)를 결합한 고수준 동기화 기법입니다.
- 프로그래머가 락을 걸고 해제하는 것을 신경 쓰지 않아도 되도록 언어 차원에서 동기화를 보장해 줍니다.
- Java의
synchronized키워드가 대표적인 예입니다.