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 |