Thread(스레드)

스레드는 프로세스 내에서 실행되는 흐름의 단위이자, CPU 스케줄링의 기본 단위다.

  • 과거의 운영체제에서는 프로세스 하나가 하나의 실행 흐름을 가짐

  • 현대 운영체제에서는 하나의 프로세스가 여러 개의 스레드를 가져 멀티스레딩(Multithreading) 지원

스레드의 메모리 구조

스레드의 가장 큰 특징은 프로세스 내의 자원을 공유하여 효율적인 자원 관리와 데이터 통신을 가능하게 하지만, 동기화 문제를 유발하는 원인이 되기도 한다.

자원 공유 방식

  • 공유 영역: Code, Data, Heap 영역은 프로세스 내 모든 스레드가 공유

    • 파일 디스크립터(열린 파일 목록)나 전역 변수 등을 손쉽게 공유 가능

  • 독립 영역: Stack, PC(Program Counter), 레지스터(Register)는 스레드마다 독립적으로 할당

    • 각 스레드가 독립적인 함수 호출과 실행 흐름을 가지기 위함

프로세스 vs 스레드

프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 그 자원을 활용하는 실행의 단위다.

구분
프로세스(Process)
스레드(Thread)

정의

실행 중인 프로그램(자원 할당의 단위)

프로세스 안의 실행 흐름(스케줄링의 단위)

메모리

독립된 메모리 영역(Code, Data, Heap, Stack)

Stack만 독립, 나머지는 프로세스 내 공유

통신 비용

높음(IPC 필요: 파이프, 소켓 등)

낮음(공유 메모리(Data, Heap) 직접 접근)

문맥 교환

오버헤드 큼(캐시 초기화 등 비용 높음)

오버헤드 작음(메모리 공유로 캐시 적중률 높음)

안정성

한 프로세스 종료가 다른 프로세스에 영향 없음

한 스레드의 오류가 프로세스 전체를 종료시킬 수 있음

멀티 프로세스 vs 멀티 스레드

  • 멀티 프로세스(Multi-Process): 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업 수행(예: 크롬 브라우저의 각 탭)

    • 장점

      • 독립된 구조로 인해 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 높은 안정성 제공

    • 단점

      • 문맥 교환(Context Switch) 과정에서 캐시 메모리 초기화 등 무거운 작업이 필요해 오버헤드 발생

      • 프로세스 간 통신(IPC)을 위해 복잡한 기법(파이프, 소켓 등)을 사용해야 하므로 통신 비용이 높음

  • 멀티 스레드(Multi-Thread): 하나의 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 작업 수행(예: 웹 서버 요청마다 각 스레드가 처리)

    • 장점

      • 힙 영역 등을 통해 데이터를 직접 공유하므로 통신 방법이 간단하고 통신 비용이 낮음

      • 문맥 교환 시 스택 영역 등 일부만 저장/복구하면 되어 오버헤드가 적음

    • 단점

      • 여러 스레드가 공유 자원에 동시에 접근 시 데이터 정합성 문제 발생 가능

      • 하나의 스레드에서의 치명적인 오류가 프로세스 전체에 영향을 미칠 수 있음

참고자료

Last updated

Was this helpful?