Thread(스레드)
스레드는 프로세스 내에서 실행되는 흐름의 단위이자, CPU 스케줄링의 기본 단위다.
과거의 운영체제에서는 프로세스 하나가 하나의 실행 흐름을 가짐
현대 운영체제에서는 하나의 프로세스가 여러 개의 스레드를 가져 멀티스레딩(Multithreading) 지원
스레드의 메모리 구조
스레드의 가장 큰 특징은 프로세스 내의 자원을 공유하여 효율적인 자원 관리와 데이터 통신을 가능하게 하지만, 동기화 문제를 유발하는 원인이 되기도 한다.
자원 공유 방식
공유 영역: Code, Data, Heap 영역은 프로세스 내 모든 스레드가 공유
파일 디스크립터(열린 파일 목록)나 전역 변수 등을 손쉽게 공유 가능
독립 영역: Stack, PC(Program Counter), 레지스터(Register)는 스레드마다 독립적으로 할당
각 스레드가 독립적인 함수 호출과 실행 흐름을 가지기 위함
프로세스 vs 스레드
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이고, 스레드는 그 자원을 활용하는 실행의 단위다.
정의
실행 중인 프로그램(자원 할당의 단위)
프로세스 안의 실행 흐름(스케줄링의 단위)
메모리
독립된 메모리 영역(Code, Data, Heap, Stack)
Stack만 독립, 나머지는 프로세스 내 공유
통신 비용
높음(IPC 필요: 파이프, 소켓 등)
낮음(공유 메모리(Data, Heap) 직접 접근)
문맥 교환
오버헤드 큼(캐시 초기화 등 비용 높음)
오버헤드 작음(메모리 공유로 캐시 적중률 높음)
안정성
한 프로세스 종료가 다른 프로세스에 영향 없음
한 스레드의 오류가 프로세스 전체를 종료시킬 수 있음
멀티 프로세스 vs 멀티 스레드
멀티 프로세스(Multi-Process): 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업 수행(예: 크롬 브라우저의 각 탭)
장점
독립된 구조로 인해 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 주지 않아 높은 안정성 제공
단점
문맥 교환(Context Switch) 과정에서 캐시 메모리 초기화 등 무거운 작업이 필요해 오버헤드 발생
프로세스 간 통신(IPC)을 위해 복잡한 기법(파이프, 소켓 등)을 사용해야 하므로 통신 비용이 높음
멀티 스레드(Multi-Thread): 하나의 프로그램을 여러 개의 스레드로 구성하여 각 스레드가 작업 수행(예: 웹 서버 요청마다 각 스레드가 처리)
장점
힙 영역 등을 통해 데이터를 직접 공유하므로 통신 방법이 간단하고 통신 비용이 낮음
문맥 교환 시 스택 영역 등 일부만 저장/복구하면 되어 오버헤드가 적음
단점
여러 스레드가 공유 자원에 동시에 접근 시 데이터 정합성 문제 발생 가능
하나의 스레드에서의 치명적인 오류가 프로세스 전체에 영향을 미칠 수 있음
참고자료
Last updated
Was this helpful?