티스토리 뷰
🚀 프로세스와 스레드의 차이, 왜 이런 구조가 필요했을까?
컴퓨터 공부를 하다 보면 반드시 마주치는 질문이 있습니다.
"프로세스와 스레드는 뭐가 다른가요?"
그리고 대부분의 설명은 이렇게 끝납니다.
"프로세스는 독립된 실행 단위고, 스레드는 프로세스 내 작업 흐름 단위입니다."
하지만 이런 정의만으로는 사실상 왜 이런 구조가 만들어졌는지,
언제, 어떤 상황에서 각각이 필요한지 이해하기 어렵습니다.
그래서 오늘은
프로세스와 스레드가 왜 생겨났고, 무엇이 다른지, 구조적으로 왜 그렇게 설계되었는지
맥락부터 차근차근 풀어보겠습니다.
1️⃣ 왜 프로세스와 스레드가 필요한가?
🔍 프로그램 하나만 실행되던 시절
초기 컴퓨터는 한 번에 하나의 프로그램만 실행할 수 있었습니다.
파일 복사를 시작하면 복사가 끝날 때까지 다른 프로그램은 실행할 수 없었죠.
하지만 사용자는 점점 더 많은 것을 원했습니다.
"파일 복사하는 동안 음악도 듣고, 문서도 작성하고 싶어."
그렇게 운영체제는 여러 프로그램을 동시에 실행할 수 있도록
프로세스(Process)라는 개념을 도입했습니다.
프로세스는 실행 중인 프로그램 하나하나를 독립된 실행 단위로 관리합니다.
⚠️ 프로세스 구조의 한계
프로세스를 사용하면 여러 프로그램을 동시에 실행할 수 있지만
문제가 또 생깁니다.
예를 들어, 웹 브라우저를 실행했다고 가정해 봅시다.
그 안에서 우리는
- 탭을 여러 개 열고
- 동영상을 보고
- 광고도 로딩하고
- 채팅도 합니다.
이 모든 작업을 프로세스 기반으로 처리하려면
탭마다, 광고마다, 동영상마다 프로세스를 새로 만들어야 합니다.
그러면 어떻게 될까요?
✅ 메모리 사용량 폭증
✅ 프로세스 간 통신 비용 증가
✅ 관리 복잡도 증가
그래서 운영체제는 고민했습니다.
"같은 프로그램 내에서 여러 작업을 동시에 처리하고 싶을 때,
굳이 독립된 프로세스를 만들어야 할까?"
이 질문에서 출발해 탄생한 개념이 바로
스레드(Thread)입니다.
2️⃣ 스레드의 등장 – 효율적인 작업 흐름
스레드는 하나의 프로세스 내에서
여러 작업 흐름을 독립적으로 실행할 수 있게 해주는 구조입니다.
쉽게 말해,
프로세스는 프로그램 단위의 실행 흐름,
스레드는 프로그램 내 작업 단위의 실행 흐름이라고 할 수 있습니다.
스레드는 프로세스가 가진 자원(코드, 데이터, 힙)을 공유하면서
실행 흐름만 따로 나누기 때문에
✅ 자원 소모가 적고
✅ 통신이 빠르며
✅ 동시에 여러 작업을 효율적으로 수행할 수 있습니다.
3️⃣ 메모리 구조 – 왜 이렇게 설계됐을까?
프로세스와 스레드의 가장 큰 차이는 메모리 구조에서 드러납니다.
📌 프로세스의 메모리 구조
프로세스는
- 코드 영역
- 데이터 영역
- 힙 영역 (동적 메모리)
- 스택 영역 (함수 호출, 지역 변수 저장)
모든 메모리 공간을 독립적으로 가집니다.
다른 프로세스와 메모리를 공유하지 않기 때문에
통신하려면 Inter-Process Communication (IPC)이라는 복잡한 절차가 필요합니다.
📌 스레드의 메모리 구조
스레드는 같은 프로세스의 자원을 공유합니다.
즉,
- 코드, 데이터, 힙 영역은 공유
- 스택 영역은 스레드마다 별도로 존재
❗️ 왜 스택은 공유하지 않을까?
스택에는 함수 호출 정보, 지역 변수가 저장됩니다.
스레드마다 다른 작업을 수행하므로
스택을 공유하면 실행 흐름이 뒤섞여 프로그램이 망가집니다.
따라서 스택은 스레드별로 독립되어야 합니다.
반면, 코드, 데이터, 힙 영역은
프로세스 내 모든 스레드가 같은 프로그램의 일부이기 때문에
공유하는 것이 자원 효율성 측면에서 합리적입니다.
4️⃣ 쉽게 이해하는 비유
프로세스와 스레드의 차이를
건물과 직원에 비유해봅시다.
프로세스는 독립된 건물
건물마다 수도, 전기, 출입 카드 시스템이 다르고
서로 연락하려면 전화나 문서를 주고받아야 합니다.스레드는 같은 건물 안의 여러 부서, 직원
같은 건물의 전기, 수도, 인터넷, 회의실을 공유하고
바로 옆 부서에 가서 협업할 수 있습니다.
그러나 각자의 노트북, 업무 메모장(스택)은 따로 가지고 있어야
업무가 꼬이지 않습니다.
5️⃣ 실행 측면 차이 – 언제 무엇을 쓰는가?
정리하자면,
- 프로세스는 서로 다른 프로그램을 실행하기 위한 독립 단위
(크롬, 메모장, 카카오톡 등) - 스레드는 하나의 프로그램 내에서 여러 작업을 효율적으로 처리하기 위한 단위
(크롬 내 여러 탭, 게임 내 배경음악과 네트워크 통신)
프로세스는 독립성과 안정성이 장점이지만
자원 소모와 통신 비용이 큽니다.
스레드는 자원 효율성, 빠른 통신이 장점이지만
하나의 스레드가 죽으면 전체 프로세스가 위험해질 수 있는 단점이 있습니다.
✅ 마무리 – 핵심 요점
프로세스와 스레드의 구조적 차이는
그냥 기술적 구분이 아니라
컴퓨터가 여러 작업을 동시에 효율적으로 처리하기 위해 어떤 문제를 해결하고자 했는지에서 출발합니다.
- 프로세스: 프로그램 자체를 실행하기 위한 독립된 실행 단위
- 스레드: 같은 프로그램 내에서 여러 작업을 효율적으로 처리하기 위한 작업 흐름 단위
- 메모리 구조:
→ 자원(코드, 데이터, 힙)은 공유해 효율성 확보
→ 스택은 실행 흐름 보호를 위해 독립 유지
✏️ 한 문장 요약
프로세스는 프로그램을 실행하기 위한 독립 공간,
스레드는 그 프로그램 내에서 여러 작업을 효율적으로 나누기 위해 만들어진 구조이며,
힙을 공유하고 스택은 독립적으로 유지하는 이유는
자원 효율성과 실행 흐름 보호라는 운영체제 설계 철학 때문이다.
'프로그래밍 > 시스템 프로그래밍' 카테고리의 다른 글
CreateThread()와 _beginthreadex() 차이점 (0) | 2025.04.05 |
---|---|
__stdcall 이란? (0) | 2025.04.05 |
파이프 방식의 IPC (0) | 2025.03.27 |
프로세스, 핸들 테이블, 그리고 핸들 상속 (0) | 2025.03.26 |
프로세스와 환경변수 (0) | 2025.03.26 |
- Total
- Today
- Yesterday
- 일본어문법무작정따라하기
- 통계학
- 코딩테스트
- 티스토리챌린지
- K-MOOC
- 윤성우
- 행동주의
- 학습이론
- 오블완
- 정보처리기사
- 백준
- 일본어
- 보세사
- 류근관
- 회계
- 인지부조화
- C
- c++
- Python
- 파이썬
- 물류관리사
- 심리학
- 학습심리학
- 데이터분석
- 통계
- 열혈프로그래밍
- 강화학습
- 행동심리학
- 조건형성
- 일문따
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |