프로세스와 스레드

프로세스와 스레드 (Process & Thread)

프로세스 vs 스레드, 멀티스레드 스케줄링, 컨텍스트 스위칭, Race Condition, 동기화

프로세스 vs 스레드

구분 프로세스 (Process) 스레드 (Thread)
정의 실행 중인 프로그램, 자원 할당의 단위 프로세스 내 실행 흐름의 단위
메모리 독립적인 메모리 영역 할당 (Code/Data/Stack/Heap) 프로세스 메모리 공유 (Stack 제외)
자원 공유 공유하지 않음 → IPC 필요 공유함
오버헤드 생성·컨텍스트 스위칭 오버헤드 큼 생성·컨텍스트 스위칭 오버헤드 작음
안정성 한 프로세스 오류가 다른 프로세스에 영향 없음 한 스레드 오류가 전체 프로세스에 영향

멀티스레드 스케줄링

OS가 여러 스레드에 CPU 자원을 효율적으로 할당하는 기법

방식 설명
시분할 (Time-Sharing) 각 스레드에 짧은 Time Quantum 할당 후 순서대로 전환
우선순위 (Priority Based) 우선순위 높은 스레드에 먼저 CPU 할당
라운드 로빈 (Round Robin) 우선순위 없이 모든 스레드가 공평하게 할당, 시간 초과 시 큐 맨 뒤로 이동

컨텍스트 스위칭 (Context Switching)

CPU가 현재 실행 중인 프로세스/스레드의 상태를 저장하고, 다음 프로세스/스레드 상태를 복원하는 과정

과정:

  1. 현재 스레드 A의 상태(레지스터, PC)를 PCB/TCB에 저장
  2. 다음 스레드 B의 상태를 TCB에서 복원
  3. 스레드 B 실행 재개

발생 시점: 인터럽트, 시스템 콜, 스케줄링 전환점

컨텍스트 스위칭 중 CPU는 아무 일도 하지 못함 → 과도하게 잦으면 성능 저하(Overhead)
스레드는 프로세스보다 오버헤드가 적음 (공유 메모리가 많아 저장·복원할 정보가 적음)


Race Condition (경쟁 상태)

둘 이상의 스레드가 공유 자원에 동시 접근하여 조작할 때, 실행 순서에 따라 결과가 달라지는 예측 불가능한 상황


동기화 기법

기법 설명
Lock 임계 영역(Critical Section) 진입 전 락 획득, 나올 때 해제. 락 보유 중 다른 스레드는 대기
뮤텍스 (Mutex) 오직 하나의 스레드만 임계 영역 진입 허용. 락을 획득한 스레드만 해제 가능
세마포어 (Semaphore) 지정된 N개의 스레드가 동시 접근 허용

세마포어 종류:


큐 패턴 (Queue Patterns)

큐 종류 설명 특징
SyncQueue 생산자-소비자 간 속도 조절용 스레드 안전 큐 큐 가득 참 → 생산자 대기(Block), 큐 빔 → 소비자 대기(Block)
AsyncQueue 비동기(이벤트 루프) 환경의 논블로킹 큐 await와 함께 사용. 비어있으면 비동기 대기 후 재개
DelayQueue 각 아이템에 지연 시간 설정. 만료 시간이 지난 후에만 꺼낼 수 있음 캐시 만료 처리, 지연 작업 스케줄링에 유용

관련 개념