멀티스레딩 기초

김 무무 ㅣ 2024. 9. 28. 00:37

1. 프로세스와 스레드

 


프로세스 (Process)

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


특징:

  - 독립된 메모리 공간

  - 운영체제로부터 자원을 할당받음

  - 최소 하나의 스레드(메인 스레드) 포함

  - 독립적인 메모리 공간을 가짐(코드, 데이터, 힙, 스택)

 

 

스레드 (Thread)

프로세스 내에서 실행되는 흐름의 단위

 

특징:

  - 같은 프로세스 내의 스레드들은 메모리 공간을 공유

  - 빠른 생성과 컨텍스트 스위칭

  - 병렬 처리 가능

  - 스택만 독립적으로 갖고 나머지는 프로세스 내에서 공유

 

 

2. 멀티스레딩의 장단점

 

장점

1) 성능 향상: 여러 작업을 동시에 처리하기 때문에 프로그램의 실행 속도가 빨라짐

2) 응답성 향상: 한 스레드의 작업이 길어져도 프로그램이 계속 실행되기 때문에 사용자의 응답성이 증가

3) 자원 공유: 스레드들이 프로세스 내의 메모리와 자원을 공유할 수 있다

4) 경제성: 프로세스를 생성하는것보다 자원 소모가 적다.

 

단점

1) 복잡성 증가: 단일 스레드 프로그래밍보다 복잡하며, 동기화나 데드락 등의 문제 발생 가능

2) 오버헤드: 스레드 생성과 관리에 따른 추가 비용

3) 디버깅 어려움: 디버깅을 할 때는 문제가 없더라도 실행 시 문제가 발생하는 경우가 생김

4) 확장성 제한: 스레드를 늘려 얻는 성능 향상에 한계가 있다. (무작정 스레드를 늘리지 말고 신중하게 고려해야 함)

 

 

그러므로 멀티스레드 프로그래밍은 꼭 필요한 상황인지 잘 생각하고 사용해야 한다.

필요한 상황 예시 : 오래 걸리는 작업 하나를 진행하는 동안 짧은 작업 여러 개를 실행(게임의 로딩창)

 

 

3. 동시성(Concurrency)과 병렬성(Parallelism)

 

동시성 (Concurrency)

여러 작업이 논리적으로 동시에 실행되는 것처럼 보이는 것

 

특징:

  - 시분할 방식으로 작업을 번갈아 처리

  - 단일 코어에서도 구현 가능

  - 작업 간의 빠른 전환으로 동시 실행처럼 보임

 

 

병렬성 (Parallelism)

여러 작업이 물리적으로 동시에 실행되는 것

 

특징:

  - 멀티 코어 또는 분산 시스템에서 구현

  - 실제로 동시에 여러 작업 처리

  - 작업의 실제 처리 속도 향상

 

 

4. 컨텍스트 스위치 (Context Switch)

CPU가 하나만 있다고 가정했을 때, CPU는 여러 프로세스와 스레드를 번갈아가며 실행한다.

이때 한 스레드를 실행하다가 다른 스레드로 전환되는 것을 컨텍스트 스위치라고 한다.

컨텍스트 스위치를 자주 하게되면 많은 연산이 일어나 성능이 저하된다.

 

4.1. 컨텍스트 스위치가 발생하는 상황

1) 시분할(Time Sharing)

  - CPU 스케줄러에 의한 강제적 컨텍스트 스위치

  - 각 스레드에 할당된 타임 퀀텀(혹은 타임 슬라이스) 소진시 발생

 

2) I/O 요청

  - 프로세스/스레드의 I/O 요청시 (디스크 읽기/쓰기, 네트워크 통신 등)

 

3) 동기화 작업

  - Mutex 대기

  - Semaphore 획득 대기

  - Condition Variable 대기

 

4.2. 컨텍스트 스위치 과정

1) 현재 실행중인 스레드의 상태 저장

  - 레지스터 값

  - 호출 스택

  - 메모리 맵

  - 그 외의 프로세스/스레드의 상태 정보

 

2) 새로운 스레드의 컨텍스트 로드

  - 저장된 레지스터 값 복원

  - 프로세스/스레드의 상태 정보 복원

 

'멀티스레딩' 카테고리의 다른 글

동기화 기법: Atomic 연산  (0) 2024.10.05
메모리 구조와 멀티스레딩  (0) 2024.10.03
데이터 동기화 기초  (0) 2024.10.01
스레드 생성과 관리  (0) 2024.09.28
개요  (0) 2024.09.26