Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
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
31
Archives
Today
Total
관리 메뉴

I'm FanJae.

[Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드) 본문

System Programming

[Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)

FanJae 2026. 4. 25. 22:38

[멀티 스레드 시리즈 글]

[Multi Thread] 1. 멀티 스레드를 이해하기 위한 기초 (프로그램, 프로세스, 스레드)
[Multi Thread] 2. 호출 스택과 실행 흐름
[Multi Thread] 3. 스레드는 어떻게 동작하는가 (컨텍스트 스위칭과 데이터 레이스)

[Multi Thread] 4. 경쟁 상태와 동기화 (원자성, 일관성, 뮤텍스)

[Multi Thread] 5. 교착 상태(Deadlock)와 해결 방법 (잠금 순서, 재귀 뮤텍스)

1. 프로그램과 프로세스

1) 프로그램

컴퓨터에서 실행되는 명령어 모음이 들어 있는 데이터 덩어리.

프로그램 안에는 CPU가 실행할 명령어인 코드, 실행에 필요한 정적 데이터가 포함되어 있다.

 

 

2) 프로세스

프로그램 자체는 아직 실행 중인 상태가 아니다.

프로그램을 실행하면, 운영체제가 프로그램의 코드와 데이터를 메모리로 불러오고, 실행에 필요한 공간을 준비한다.

 

프로그램에 있는 코드와 데이터를 메모리로 불러들이는 과정을 로딩(Loading)이라고 한다.

프로세스 메모리에는 프로그램 코드와 데이터뿐 아니라 힙(heap)과 스택(stack)도 함께 존재한다.

 

스택에는 현재 실행 중인 함수들의 호출 기록과 지역 변수가 저장된다.

힙은 실행 중에 필요한 메모리를 동적으로 할당 받는 공간이다.

 

2. 스레드

1) 스레드

각 프로세스에는 독립된 메모리 공간이 있다.

기본적으로 서로 다른 프로세스는 상대방의 메모리 공간을 직접 읽고 쓸 수 없다.

 

스레드는 프로세스 안에서 실제로 코드를 실행하는 흐름의 단위이다.

하나의 프로세스 안에는 하나 이상의 스레드가 존재할 수 있다.

 

2) 스레드와 프로세스의 차이점

프로세스는 각각 독립된 메모리 공간을 가진다.

반면, 스레드는 한 프로세스 안에 여러 개가 존재할 수 있고,

같은 프로세스 안의 스레드들은 코드 영역, 데이터 영역, 힙 영역을 함께 사용한다.

다만, 스레드마다 독립적인 스택을 가진다. 그래서 함수 호출 기록이나 지역 변수는 스레드마다 따로 관리된다.

3) 프로그래밍 관점의 스레드

일반적으로 프로그래밍에서 스레드를 만들때는 실행할 함수를 지정하기 때문에,

프로그래밍 관점에서는 스레드가 특정 함수를 실행한다라고 볼 수 있다.

C++에서는 std::thread를 만들 때 실행할 함수를 넘길 수 있다.

 

4) 운영체제 관점의 스레드

운영체제 관점에서 스레드는 프로세스 안에서 CPU 명령어를 실행하는 흐름의 단위이다.

스레드는 실행 위치, 스택, 레지스터 상태 같은 실행 정보를 가진다.

운영체제는 이런 정보를 기준으로 여러 스레드를 번갈아 실행하거나 병렬로 실행한다.

 

5) 싱글 스레드

프로그램을 실행하면 프로세스가 생성된다.

일반적인 프로그램은 처음에 하나의 스레드에서 실행을 시작한다.

이때 기본으로 실행되는 스레드를 메인 스레드(main thread)라고 한다.

하나의 스레드만 사용해서 작업을 처리하는 프로그램을 싱글 스레드 프로그램이라고 한다.

그리고 하나의 스레드 흐름을 기준으로 프로그램을 설계하고 구현하는 방식을 싱글 스레드 모델이라고 볼 수 있다.

 

싱글 스레드 프로그램은 한 번에 하나의 실행 흐름만 가진다.

따라서 시간이 오래 걸리는 작업을 처리하는 동안 다른 작업이 함께 진행되기 어렵다.

 

6) 멀티 스레드

프로세스는 실행 중에 새로운 스레드를 만들 수 있다.

이렇게 하나의 프로세스 안에서 여러 스레드가 함께 실행되는 구조를 멀티 스레드라고 한다.

여러 스레드는 같은 프로세스의 코드 영역, 데이터 영역, 힙 영역을 공유하면서 실행된다.

대신 각 스레드는 자기만의 스택을 가진다.

 

멀티 스레드를 사용하면 여러 작업을 동시에 처리하는 것처럼 만들 수 있다.

CPU 코어가 여러 개라면 실제로 여러 스레드가 병렬로 실행될 수도 있고,

코어가 하나라면 운영체제가 스레드를 빠르게 번갈아 실행하면서 동시에 실행되는 것처럼 보이게 한다.

 

 

 
 
 
 
 
 
Comments