스레드(Thread): 프로세스 안의 실행 단위

1. 스레드란?

스레드(Thread)는 프로세스(Process) 내에서 실제로 작업을 수행하는 실행 단위다.

  • 하나의 프로세스는 최소 하나 이상의 스레드를 가진다
  • 스레드들은 프로세스의 메모리 공간(코드·데이터·힙·파일 디스크립터 등)을 공유한다
  • 하지만 각 스레드는 자신의 레지스터 집합과 스택을 별도로 가진다

정리하면, 프로세스는 리소스를 가진 실행 단위이고, 스레드는 그 안에서 실행 흐름을 가진 실행 단위다.

2. 왜 스레드를 사용할까?

이유 설명
성능 개선 (병렬성) CPU 코어가 여러 개면 여러 스레드를 동시에 실행해 작업 속도를 높인다
리소스 공유 같은 프로세스 내 스레드는 메모리를 공유하므로, IPC보다 가볍고 빠른 통신이 가능하다
응답성 향상 메인 스레드는 입력을 받고 다른 스레드가 처리를 맡으면 시스템 응답성이 좋아진다

3. 스레드의 구성 요소

각 스레드는 다음을 가진다.

구성 요소 설명
Thread ID 스레드를 식별하는 고유 ID
Program Counter 다음에 실행할 명령어의 주소
Registers 현재 작업에 필요한 데이터 저장
Stack 함수 호출 정보, 지역 변수 저장
State 실행 상태 (Running, Ready, Blocked 등)

참고로 코드 영역·데이터 영역·열린 파일들은 같은 프로세스 내 스레드끼리 공유한다.

4. 스레드의 상태 변화

스레드는 다음 순서로 상태가 바뀐다.

New → Ready → Running → (Blocked 또는 Terminated)
        ↑         ↓
      (Unblocked, I/O 완료 시)
상태 의미
New 생성됨
Ready CPU를 기다림
Running CPU를 점유해 실행 중
Blocked 입출력 등으로 대기
Terminated 작업을 완료하고 종료

Running 상태에서 I/O를 만나면 Blocked가 되고, I/O가 끝나면(Unblocked) 다시 Ready로 돌아간다.

5. 스레드의 종류

종류 관리 주체 특징
사용자 수준 (ULT) 사용자 라이브러리(예: pthread) 커널이 존재를 모름. 컨텍스트 스위칭이 빠르지만(커널 호출 없음), 하나가 Block되면 전체가 Block될 수 있음
커널 수준 (KLT) 커널 하나가 Block돼도 다른 스레드는 계속 실행 가능. 단, 스케줄링마다 커널모드 진입/탈출이 필요해 느릴 수 있음
하이브리드 (2-Level) ULT + KLT 조합 두 방식의 장점을 살림

6. 스레드 생성 (C POSIX pthread)

#include <pthread.h>
#include <stdio.h>

void *myThreadFunc(void *arg) {
    printf("Thread 실행 중\n");
    return NULL;
}

int main() {
    pthread_t tid;
    pthread_create(&tid, NULL, myThreadFunc, NULL);
    pthread_join(tid, NULL); // main 스레드가 tid 스레드 종료를 기다림
    return 0;
}
  • pthread_create: 새로운 스레드 생성
  • pthread_join: 생성된 스레드가 끝날 때까지 대기

7. 스레드 사용 시 주의할 점

문제 설명 해결 방법
경쟁 조건 (Race Condition) 여러 스레드가 동시에 같은 데이터를 수정할 때 발생하는 오류 뮤텍스, 세마포어, 락 사용
데드락 (Deadlock) 둘 이상의 스레드가 서로 자원을 기다리며 영원히 멈춤 자원 할당 순서 지정, 타임아웃 적용
기아 (Starvation) 한 스레드가 자원을 독점해 다른 스레드가 기회를 못 얻음 공정성 보장 스케줄링

8. 스레드와 프로세스 비교

항목 프로세스 스레드
메모리 각각 독립 공유
생성 비용 크다 작다
통신 비용 IPC (느림) 메모리 공유 (빠름)
오류 전파 프로세스끼리 독립 하나가 죽으면 전체 프로세스에 영향 가능

9. 활용 예시

  • 웹 서버: 요청마다 스레드 하나 생성
  • 게임 엔진: 물리·렌더링·네트워크 처리를 각각 다른 스레드에서 수행
  • 멀티미디어 앱: 음악 재생, 동영상 디코딩, 자막 처리를 별도 스레드로 처리

한 프로세스 안에 여러 스레드가 존재하며, 이들은 같은 메모리·열린 파일을 공유한다. “프로세스는 자원을 가진 집, 스레드는 집 안에서 일하는 사람” 으로 이해하면 좋다.

10. 더 알아보기

더 깊은 내용은 스레드(Thread) 심화에서 다룬다.


© 2022 JeongHwan Yun.