프로세스와 스레드
TIL - 프로세스(Process)와 스레드(Thread)
1. 프로세스(Process)
프로세스는 실행 중인 프로그램을 의미한다. 운영체제는 프로그램이 실행되면 해당 프로그램을 하나의 프로세스로 관리하며, 프로세스마다 독립적인 메모리 공간을 가진다. 따라서 하나의 프로세스에서 문제가 발생하더라도 다른 프로세스에는 영향을 주지 않는다.
프로세스는 일반적으로 다음과 같은 메모리 영역을 가진다.
- Code 영역: 프로그램의 실행 코드가 저장되는 공간
- Data 영역: 전역 변수와 정적 변수가 저장되는 공간
- Heap 영역: 동적으로 할당되는 메모리 공간
- Stack 영역: 함수 호출과 지역 변수가 저장되는 공간
운영체제는 여러 개의 프로세스를 동시에 실행하여 멀티태스킹 환경을 제공한다.
예시
웹 브라우저를 실행하면 하나의 브라우저 프로그램이 하나의 프로세스로 실행된다.
2. 스레드(Thread)
스레드는 프로세스 내부에서 실행되는 작업의 단위이다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며 이를 멀티스레딩이라고 한다.
스레드는 같은 프로세스 내에서 실행되기 때문에 Code, Data, Heap 영역을 서로 공유한다. 대신 각 스레드는 독립적인 Stack 영역을 가진다.
이러한 구조 덕분에 스레드는 프로세스보다 생성 비용이 적고 실행 속도가 빠르다. 하지만 메모리를 공유하기 때문에 동기화 문제가 발생할 수 있다.
예시
웹 서버에서는 하나의 프로세스 안에서 여러 스레드를 사용하여 여러 사용자의 요청을 동시에 처리할 수 있다.
3. 프로세스와 스레드의 차이
| 구분 | 프로세스 | 스레드 |
|---|---|---|
| 정의 | 실행 중인 프로그램 | 프로세스 내부 실행 단위 |
| 메모리 | 독립적인 메모리 공간 사용 | 메모리 공유 |
| 생성 비용 | 비교적 큼 | 비교적 작음 |
| 안정성 | 하나의 프로세스 오류가 다른 프로세스에 영향 없음 | 하나의 스레드 오류가 프로세스 전체에 영향 가능 |
| 사용 목적 | 프로그램 단위 실행 | 작업을 동시에 처리하기 위한 병렬 실행 |
4. 멀티프로세스와 멀티스레드
멀티프로세스는 여러 개의 프로세스를 동시에 실행하는 방식이다. 프로세스 간 메모리를 공유하지 않기 때문에 안정성이 높지만 프로세스 생성 비용이 크다.
멀티스레드는 하나의 프로세스 안에서 여러 개의 스레드를 실행하는 방식이다. 메모리를 공유하기 때문에 자원 사용 효율이 높지만 동기화 문제가 발생할 수 있다.
5. 정리
프로세스는 운영체제에서 실행되는 프로그램 단위이며, 스레드는 프로세스 내부에서 실행되는 작업의 단위이다. 프로세스는 서로 독립적인 메모리를 사용하고 안정성이 높은 반면, 스레드는 메모리를 공유하여 더 빠르고 효율적인 실행이 가능하다.
추상적인 개념은 이해가 갔는데, 정확히 어디서 쓰는건지 잘 모르겠어서 예시를 추가해봤다.
프로세스 예시
1. 프로그램 실행
컴퓨터에서 여러 프로그램을 실행하면 각각이 하나의 프로세스가 된다.
예시
크롬 실행 → 프로세스 1
카카오톡 실행 → 프로세스 2
VSCode 실행 → 프로세스 3
이 프로그램들은 서로 메모리를 공유하지 않는다.
그래서 크롬이 오류로 종료되더라도 카카오톡이나 VSCode는 영향을 받지 않는다.
2. 크롬 브라우저
크롬은 대표적인 멀티프로세스 구조를 사용한다.
예시
크롬 브라우저
├─ 브라우저 프로세스
├─ 탭1 렌더링 프로세스
├─ 탭2 렌더링 프로세스
└─ GPU 프로세스
탭 하나가 오류로 죽어도 다른 탭은 정상적으로 동작한다.
이것이 프로세스를 분리하는 이유다.
스레드 예시
1. 웹 서버
웹 서버는 하나의 프로세스 안에서 여러 스레드를 사용해 사용자 요청을 처리한다.
예시
웹 서버 프로세스
├─ 스레드 1 → 사용자 A 요청 처리
├─ 스레드 2 → 사용자 B 요청 처리
├─ 스레드 3 → 사용자 C 요청 처리
여러 사용자의 요청을 동시에 처리할 수 있기 때문에 서버 성능이 좋아진다.
2. 음악 플레이어
음악 플레이어에서도 스레드가 사용된다.
예시
음악 플레이어 프로세스
├─ 스레드 1 → 음악 재생
├─ 스레드 2 → 사용자 UI 처리
├─ 스레드 3 → 파일 다운로드
음악이 재생되는 동안에도
사용자는 버튼을 누르거나 화면을 조작할 수 있다.
정리 예시
쉽게 비유하면 다음과 같다.
프로세스 = 회사
스레드 = 회사에서 일하는 직원
- 회사마다 건물이 다름 → 프로세스는 메모리가 독립적
- 직원들은 같은 회사 자원을 사용 → 스레드는 메모리를 공유