본문 바로가기
language/java

프로세스(Process) vs 스레드(Thread) 완벽 이해하기

by 죄니안죄니 2026. 5. 29.
반응형

프로세스(Process) vs 스레드(Thread) 완벽 이해하기

동시성(Concurrency)과 멀티스레드를 공부하기 전에 반드시 이해해야 하는 것이 있습니다.

바로:

프로세스(Process)

스레드(Thread)

입니다.

사실 이후에 배울:

  • synchronized
  • volatile
  • CAS
  • Atomic
  • ExecutorService
  • ThreadPool
  • CompletableFuture
  • Virtual Thread

전부 여기서 시작합니다.


대표 이미지

프로세스(Process) vs 스레드(Thread)
프로세스(Process) vs 스레드(Thread)프로세스(Process) vs 스레드(Thread)
 
 

 


1. 프로그램과 프로세스는 다르다

많이 헷갈리는 부분.


프로그램

실행 파일 자체
 

예:

chrome.exe
java.exe
notepad.exe
 

디스크에 저장된 상태.

아직 실행되지 않음.


2. 프로세스(Process)

프로그램을 실행하면

운영체제(OS)가:

실행 중인 프로그램
 

으로 만들어 줌.

이것이 프로세스.


예:

chrome.exe 실행
↓
Chrome Process 생성
 

3. 프로세스 정의

한 줄 정의.

실행 중인 프로그램의 인스턴스
 

4. 프로세스는 무엇을 가질까?

운영체제는 프로세스마다:

메모리
파일 핸들
소켓
CPU 자원
 

을 할당.


5. 프로세스 메모리 구조

대표적으로:

Process

 ├─ Code
 ├─ Data
 ├─ Heap
 └─ Stack
 

6. 프로세스 특징

매우 중요.

프로세스끼리는 메모리를 공유하지 않는다.
 

7. 예시

Chrome Process
Heap 1GB

VS

Notepad Process
Heap 100MB
 

서로 접근 불가.


8. 왜?

OS가 보호하기 때문.


만약 가능하다면:

메모장 프로그램이
은행 프로그램 메모리 수정 가능
 

해짐.

엄청 위험.


9. 그래서 프로세스는 독립적

안전성 높음
 

하지만

생성 비용 큼
 

10. 문제 발생

예를 들어 웹 브라우저.


Chrome이

사용자 입력
네트워크
렌더링
동영상
 

을 처리해야 함.


모든 작업을 프로세스로 만들면?


11. 프로세스 생성 비용

매우 비쌈.

운영체제는:

메모리 할당
PCB 생성
스케줄링 등록
 

수행.


그래서 등장.


12. 스레드(Thread)

한 줄 정의.

프로세스 안에서 실행되는 작업 단위
 

13. 비유

프로세스 = 회사

스레드 = 직원


회사
 ├─ 직원1
 ├─ 직원2
 ├─ 직원3
 

회사 자원은 공유.

직원은 각각 일함.


14. 실제 구조

Process

 ├─ Thread 1
 ├─ Thread 2
 ├─ Thread 3
 

15. 핵심 특징

매우 중요.

스레드는 Heap을 공유한다.
 

16. 구조

Process

 Heap
 ↑ 공유

 ├─ Thread1
 │   Stack
 │
 ├─ Thread2
 │   Stack
 │
 └─ Thread3
     Stack
 

17. 정리


영역 공유 여부
Heap 공유
Method Area 공유
Stack 개별

18. Java 관점

예:

 
public class User {

    private String name;
}
 

객체 생성.

 
User user = new User();
 

객체는?

Heap
 

에 생성.


19. Thread 2개

 
Thread A
Thread B
 

둘 다

 
user.setName(...)
 

가능.


왜?

Heap 공유.


20. 여기서 문제 발생

대표적으로:

Race Condition
 

예:

 
count++;
 

동시에 실행.


결과

10000 예상

↓

9834
 

가능.


21. 이것이 동시성 문제

다음에 배울:

 
synchronized
 

가 등장하는 이유.


22. Thread는 왜 빠를까?

프로세스보다:

생성 비용 적음
 

23. 이유

프로세스 생성

메모리 공간 생성
PCB 생성
 

스레드 생성

Stack 생성
TCB 생성
 

정도.


훨씬 가벼움.


24. Context Switching

매우 중요.


CPU는 사실

동시에 여러 작업 수행 불가
 

(코어 하나 기준)


25. 운영체제가

Thread A
↓
Thread B
↓
Thread C
 

를 매우 빠르게 전환.


26. 이것이 Context Switch

Context switch


27. 저장되는 정보

대표:

Program Counter
Register
Stack 정보
 

28. 비용 존재

그래서:

스레드 무한 생성
 

은 오히려 성능 저하.


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

멀티 프로세스

Chrome
VSCode
Notepad
 

각각 독립.


30. 장점

안정성 높음
 

하나 죽어도

다른 프로세스 영향 적음.


31. 단점

메모리 많이 사용
 

32. 멀티 스레드

하나의 프로세스
 ↓
여러 Thread
 

33. 장점

메모리 공유
빠른 통신
적은 비용
 

34. 단점

동기화 문제
 

발생.


35. Java에서 Thread 생성

예:

 
Thread t = new Thread(
    () -> {
        System.out.println(
            Thread.currentThread().getName()
        );
    }
);

t.start();
 

36. 실행 흐름

Main Thread
 ↓
새 Thread 생성
 ↓
동시 실행
 

37. JVM 관점

Java 프로그램 시작 시

이미

Main Thread
 

가 존재.


 
public static void main()
 

도 사실

Main Thread
 

가 실행.


38. 실제 서버 구조

Spring Boot 실행.


내부적으로

Main Thread
Tomcat Worker Thread
GC Thread
JIT Thread
 

등 수십 개 존재.


39. 면접 단골 질문

Q. 프로세스와 스레드 차이?

프로세스
=
독립 실행 단위

스레드
=
프로세스 내부 실행 단위
 

Q. 스레드는 무엇을 공유하나요?

Heap
Method Area
 

Q. Stack은 공유하나요?

아니오

스레드별 독립
 

Q. 왜 동기화가 필요한가요?

Heap 공유 때문
 

40. 핵심 비교표


항목 프로세스 스레드
실행 단위 프로세스 프로세스 내부
메모리 독립 공유
생성 비용 작음
통신 비용 작음
안정성 높음 낮음
동기화 필요 거의 없음 매우 중요

41. 핵심 흐름 요약

프로그램
 ↓
프로세스 생성
 ↓
프로세스 내부
 ↓
스레드 생성
 ↓
Heap 공유
 ↓
동시성 문제 발생 가능
 

42. 가장 중요한 핵심 한 줄

프로세스는 독립된 실행 공간이고,
스레드는 같은 프로세스의 메모리를 공유하며 실행되는 작업 단위이다.
 

43. 다음 글 예고

다음 글은:

Thread와 Runnable

입니다.

여기서부터 실제 Java 코드로:

 
new Thread()

Runnable

run()

start()
 

차이와 JVM 내부 동작을 배우게 됩니다.

그리고 이후:

synchronized
↓
volatile
↓
CAS
↓
Atomic
↓
ThreadPool
 

까지 전부 연결됩니다.

반응형

댓글