프로세스와 스레드의 차이
프로세스(Process)와 스레드(Thread)는 현대 운영체제(특히 멀티태스킹 OS)에서 중요한 개념임.
서로 긴밀히 연관되어 있으면서도 메모리 구조, 생성 및 종료 오버헤드, 자원 공유 방식 등에 있어 차이를 가짐.
정의
1. 프로세스(Process)
프로그램(코드)이 메모리에 적재되어 실행 중인 상태를 가리킴.
독립된 실행 흐름을 갖고, 운영체제로부터 자원을 할당받아 구동되는 하나의 작업 단위임.
2. 스레드(Thread)
프로세스 안에서 실행되는 가장 작은 실행 흐름 단위임.
한 프로세스 내부에 여러 스레드가 존재할 수 있으며, 각각 병렬적(또는 병행적)으로 작업을 수행함.
주소 공간과 자원 관리
1. 프로세스
각 프로세스는 독립된 메모리 공간(코드 세그먼트, 데이터 세그먼트, 힙, 스택 등)을 가짐.
운영체제는 프로세스 간 메모리 보호 기법(페이지 테이블, 가상 메모리 등)을 적용하여, 다른 프로세스가 임의로 접근하지 못하도록 격리함.
프로세스 사이에 데이터를 주고받으려면 파일, 소켓, 파이프, 공유 메모리 등 IPC(Inter-Process Communication) 기법을 사용해야 함.
2. 스레드
같은 프로세스 내부에 존재하는 스레드들은 코드 세그먼트, 데이터 세그먼트, 힙 등을 공유함.
각 스레드는 독립된 스택(stack)과 레지스터(register)를 갖지만, 다른 스레드와 힙이나 전역 변수 등에 즉시 접근할 수 있음.
공유 데이터 사용 시 동기화(뮤텍스, 세마포어, 모니터 등)를 적절히 적용해야 함.
잘못된 동기화는 경합 조건(race condition)을 발생시켜 치명적 버그를 유발할 수 있음.
생성, 종료 및 컨텍스트 스위칭
1. 프로세스
새로운 프로세스를 생성할 때는 운영체제가 PCB(Process Control Block)를 생성하고, 독립된 메모리 공간을 할당하는 등의 작업이 필요함.
따라서 스레드 생성보다 오버헤드가 크다고 할 수 있음.
프로세스 간 문맥 교환(컨텍스트 스위칭)도, 주소 공간을 완전히 교체해야 하므로 스레드 문맥 교환보다 상대적으로 더 무거움.
2. 스레드
같은 프로세스 내부에서 스레드 하나를 추가로 생성하는 것은, 프로세스 전반적인 자원 공유 구조를 그대로 이용하기 때문에 상대적으로 생성 오버헤드가 낮음.
스레드 문맥 교환 시에는 레지스터 상태 및 스택 포인터 등을 변경하는 작업이 주로 수행되며, 프로세스 문맥 교환보다는 경량화되어 있음.
스케줄링
1. 프로세스
커널(운영체제)이 관리하는 스케줄링 단위로서, 프로세스마다 최소 1개 이상의 스레드가 존재함.
각 프로세스는 독립적으로 스케줄링 대상이 됨.
특히 전통적인 OS에서는 하나의 프로세스가 단 하나의 스레드만 갖는다고 가정할 수 있으므로, “태스크” 단위로 다뤄짐.
2. 스레드
멀티스레드 프로세스의 경우, 운영체제에 따라 각 스레드가 별도의 스케줄링 단위(Kernel-Level Thread)로 처리되기도 함.
일부 시스템에서는 User-Level Thread(경량 스레드)를 사용하기도 하는데, 이 경우 커널에서 모든 스레드를 직접 스케줄링하지 않고 사용자 레벨에서 스케줄러를 운영하기도 함.
동기화와 통신
1. 프로세스 간 통신(IPC)
프로세스는 서로의 메모리 공간을 침범할 수 없기 때문에, 별도의 인터페이스를 통해서만 통신해야 함.
대표적으로 파이프(PIPE), 소켓, 메세지 큐, 공유 메모리(특수 시스템 콜 이용), 시그널 등이 있음.
2. 스레드 간 동기화
같은 프로세스 내 메모리(전역 변수, 힙 등)를 공유하므로, 동기화 없이 동시에 접근할 경우 경합 조건 발생이 가능해짐.
이를 방지하기 위해 스레드 동기화 기법(뮤텍스, 세마포어, 모니터, 조건 변수 등)을 적절히 사용해야 함.
IPC보다 훨씬 빠르고 직접적이지만, 스레드 안전성을 고려해야 함.
활용 사례
1. 프로세스 사용 예
1-1. 서로 관련 없는 독립적인 작업을 수행할 때
예를 들어, 웹 서버와 DB 서버는 별개의 프로세스로 운영되어 각자 자원을 안전하게 관리함.
1-2. 보안적인 이유로 격리해야 할 때
외부 바이너리를 실행하는 등, 혹은 샌드박스 환경을 구성하여 프로세스를 격리하는 경우.
2. 스레드 사용 예
2-1. 동일 작업을 병렬 처리해야 할 때
대규모 데이터 처리, 멀티코어 활용, I/O 대기 시간을 단축하기 위해 스레드를 활용함.
2-2. 빠른 컨텍스트 스위칭과 공유 메모리를 통한 저비용 통신이 필요한 경우
예를 들어 웹 서버 소프트웨어(아파치, Nginx, Tomcat 등)에서, 여러 스레드가 동시에 요청을 처리하도록 설계함.
프로세스 장단점
1. 장점
독립된 메모리 공간(격리도 높음)
한 프로세스가 문제가 생겨도 다른 프로세스에는 영향을 덜 줌(안정성↑)
2. 단점
생성 및 종료 오버헤드가 큼.
프로세스 간 통신(IPC)이 상대적으로 복잡하고 느림.
스레드 장단점
1. 장점
같은 프로세스 자원을 공유하기 때문에 생성 및 문맥 교환 속도가 빠름.
프로세스 내부에서 쉽게 데이터 공유 가능.
2. 단점
잘못된 동기화로 인한 동시성 문제(경합 조건 등)가 발생하기 쉬움.
하나의 스레드가 문제를 일으키면 프로세스 전체에 영향을 미칠 수 있음(안정성↓).
정리
프로세스는 “독립된 실행 단위”로서 자원과 주소 공간을 독립적으로 운영하며, 다양한 IPC 기법을 이용하여 통신함.
스레드는 “프로세스 내의 실행 흐름 단위”로서 메모리 공간을 공유하고, 빠른 통신과 생성/종료를 제공하지만 동기화 오버헤드와 안전성 문제에 신경 써야 함.
현대 시스템에서는 멀티코어 환경을 십분 활용하기 위해 멀티프로세스 + 멀티스레드 방식을 혼합하여 사용하는 추세도 많음.
예컨대, 여러 프로세스가 각각 내부에서 멀티스레드를 활용해 최대 성능과 안전성을 동시에 추구함.
최적의 설계는 시스템 규모, 보안 요구 사항, 병렬 처리량, 유지보수 난이도 등을 모두 고려해야 함.
일반적인 애플리케이션 설계 시에는 스레드를 적극적으로 활용하되, 필요한 경우 프로세스 간 분할로 안전성과 확장성을 높이는 방안을 병행하여 고려해야 함.
'Operating System > Computer' 카테고리의 다른 글
[Computer] 프로세스의 문맥 교환 (0) | 2025.01.28 |
---|---|
[Computer] 멀티프로세싱 및 멀티스레딩 (0) | 2025.01.27 |
[Computer] CPU 스케줄링 알고리즘 (0) | 2025.01.26 |
[Computer] 자바 표준 스펙 (1) | 2025.01.26 |
[Computer] 운영체제의 PCB (1) | 2025.01.26 |