반응형

 

 

 

"프로세스(Process)와 스레드(Thread)"

 

 

개발을 하다보면 게임이 갑자기 버벅이거나 로딩 중에 UI가 멈추는 상황을 자주 만나게 된다.
이때 원인을 파고 들어가면 거의 항상 프로세스와 스레드 개념으로 이어진다.

 


프로세스는 실행 중인 프로그램이고,
스레드는 그 안에서 실제로 CPU 시간을 배정받아 움직이는 작업자(실행 흐름)이다.

 


오늘은 프로세스와 스레드의 개념을 정리하고, 둘이 어떤 차이가 있는지

간단히 정리해볼 예정이다.

 

 

 


 

 

 

1) 프로세스(Process)란?



프로세스는 아주 간단히 말해 '실행 중인 프로그램'이다.

 

 

	"프로세스 = 실행 중인 프로그램 컨테이너"
프로세스 A (게임.exe)
 ├─ 메모리 공간(주소)
 ├─ 리소스(파일)
 └─ 스레드들

프로세스 B (디스코드.exe)
 ├─ 메모리 공간(별개)
 └─ 스레드들

 


프로세스끼리는 기본적으로 서로 메모리를 공유하지 않는 격리된 단위라고 이해하면 편하다.

 

 

 


 

 

2) 스레드(Thread)란?



스레드는 프로세스 안에서 실제로 실행되는 최소 단위이다.

 운영체제는 프로세스가 아니라 스레드에 CPU 시간을 배정한다.

 

 

중요한 특징으로,
같은 프로세스 안의 스레드들은 메모리(주소 공간)와 리소스를 공유한다.

 

	"같은 프로세스 안 = 같은 책상 공유"
프로세스(메모리/리소스 공유)
 ├─ 스레드 1 : 메인 루프(Update 등)
 ├─ 스레드 2 : 로딩/네트워크
 └─ 스레드 3 : 계산/AI 등
   (같은 메모리를 보지만, 서로 간섭도 가능 → 동기화 필요)

 

 


(즉, 스레드는 가볍게 여러 개 만들 수 있지만, 공유 때문에 동기화 문제가 생기기 쉬운 구조)

 

 

 


 

 

 


3) 스레드를 쓰는 이유는?



스레드를 쓰는 가장 큰 이유는 동시에 처리보다는, 

'메인 흐름'을 멈추지 않기 위해서다.

 


게임이나 앱에서 사용자가 체감하는 끊김은

보통 렌더링/입력을 담당하는 메인 흐름이 잠깐이라도 막힐 때 발생한다.

 


예를 들어 로딩, 파일 읽기, 큰 계산, JSON 파싱 같은 작업을 메인 흐름에서 그대로 처리하면
그 순간 프레임이 떨어지거나 UI가 얼어붙는 현상이 생긴다.

 


그래서 스레드는 보통 이런식으로 사용된다.

 

+++

 

프레임 유지: 렌더링/입력(메인 루프)이 멈추지 않게 하기

긴 작업 분리: 로딩/파싱/AI/경로 탐색/네트워크 처리 등을 백그라운드로 보내기

 

멀티코어 활용: 가능한 작업을 병렬화해서 처리 시간을 줄이기

 

+++



그리고 여기서 중요한 점이 하나 있는데,
메인 흐름을 비우기 위해 스레드를 쓰더라도,

 모든 코드가 스레드에서 안전하게 돌 수 있는 건 아니라는점이다. 

 


특히 Unity는 대부분의 API가 메인 스레드에서만 안전하게 동작하기 때문에,
실제로는 '백그라운드에서 계산 → 메인 스레드에서 반영' 패턴이 기본이 된다.

 

	"메인 스레드가 막히면 화면이 멈춤"
[단일 흐름]
입력 처리 → 무거운 로딩(2초) → 렌더링
                ↑ 이 구간 동안 화면/입력 멈춤

[분리]
메인 스레드: 입력/렌더링 계속
백그라운드: 로딩/계산 처리

 

 

 

 

 


 

 

 

4) 프로세스 vs 스레드 차이는?


(a) 메모리/격리

 

프로세스

서로 메모리 공간이 분리

(기본적으로 격리)


스레드

같은 프로세스 안에서 메모리/리소스를 공유

 



(b) 비용(무게감)


프로세스

'프로그램 컨테이너'라서

생성/전환 비용이 상대적으로 큼

 

스레드

같은 컨테이너 안의 작업자라서 상대적으로 가볍지만,

대신 공유로 인한 관리 비용(락/동기화)이 생김

 



(c) 위험 영향 범위

 

프로세스

분리되어 있어 다른 프로세스까지 바로 영향 가는 경우는 상대적으로 적음


스레드

하나가 같은 프로세스 메모리를 망가뜨리면 프로세스 전체가 위험




 

 

 

5) 오늘의 한 줄 요약



프로세스실행 중인 프로그램이고, 스레드는 그 안에서 일을 처리하는 실행 흐름(작업자)이다.

반응형

+ Recent posts