Main
냥코DB
공룡게임
소개
문서
프로젝트
일반
멀티스레딩 정리
1 / 12
멀티스레딩 정리
멀티스레드를 이용한 프로그래밍 정리
2025-12-30
블로그 포스트: https://crusthack.github.io/blog/ComputerScience/multiThread
멀티스레딩 정리
멀티스레딩 정리
NEXT
개요
멀티스레딩 정리
멀티스레드를 이용한 프로그래밍 정리
2025-12-30
블로그 포스트: https://crusthack.github.io/blog/ComputerScience/multiThread
개요
멀티 스레드 프로그래밍을 할 때 주의해야하는 점과 주요 최적화 방법을 정리한 포스트입니다.
스레드(Thread)
스레드
: 모든 프로세스가 최소 한 개 이상 가지는 프로그램의
실행 흐름 단위
메인 스레드
:
main함수
를 시작점으로 가지며 프로세스의 생성과 함께 생성되는 스레드
각 스레드는 생성될 때 실행할
코드 주소
와
파라미터 값들
을 가짐.
프로세스와 스레드의 차이
프로세스는 실행할
프로그램의 메타 정보
, pid, ppid와 같은 정보들 및 코드 영역, 데이터 영역, 힙 영역 등을 가짐
스레드는 자신이 실행할 코드 주소(Program Counter),
스택 메모리
, 커널 스택 메모리,
Register Context
, TID, State 등을 가짐.
기존 운영체제 수업에서 PCB(Process Control Block)에 있다고 설명하는 프로그램 실행 정보의 일부가 스레드(
TCB
)에게로 넘어감
멀티 스레딩을 하는 이유
-> 스레드를 여러개 생성해서 실행 흐름을 생성하는 이유
멀티코어 활용,
병렬 처리
. (예. 스레드1은 1에서부터 100까지의 덧셈을, 스레드2는 100부터 200까지의 덧셈을 동시에 한 뒤 두 결과값을 합침)
I/O-bound 작업 동안에
다른 일
을 하려고. (예. 디스크에서 게임 정보를 불러오는 동안에 화면엔 로딩바가 움직이게 하는 동시 동작)
즉, 컴퓨터 자원을 더 효율적으로 유휴자원 없이 최대한 활용하기 위해 멀티스레딩을 함.
윈도우에서 작업관리자를 실행한 후 성능 탭을 보면, 현재 실행되고 있는
프로세스 수
와
스레드 수
가 나옴. 평균적으로
프로세스당 10개 이상
의 스레드를 사용하고 있음이 확인됨.
멀티 스레드와 멀티 프로세스의 차이점
멀티 스레드는 하나의 프로세스를 공유하는
실행 단위
, 멀티 프로세스는 프로그램의 서로 독립적인
실행 인스턴스
.
멀티 스레드
는 프로세스의 힙, 데이터 영역 메모리를 공유하기에 스레드 간에 간편한 상태 공유가 가능함.
메모리가 공유되기 때문에 스레드 간의 영역(상태)이 침해될 수 있는 경쟁 상태가 발생.
멀티 프로세스
는 서로 독립적인 실행 상태를 가지기에 서로간의 침해가 불가능.
단, 프로세스간의 상태 공유가 힘들어
프로세스간 통신
(IPC)을 따로 수행해야 하며, n개의 스레드를 만드는 것보다 n개의 프로세스를 만드는 것이 비용이 더 큼.
멀티 스레드 환경에서의 주의점
경쟁 상태
잘못된 락에 의한 데드락
메모리 가시성 문제
컨텍스트 스위칭 비용
유저 스레드와 커널 스레드
callback
promise
async await
Sync