본문 바로가기
카테고리 없음

[기획 연재 14편] 멀티 스레드(Thread): 몸이 하나인 CPU가 동시에 여러 일을 하는 환상 (동시성의 원리)

by khhjyc_ 2026. 1. 18.

서론: 요리사는 한 명인데 주문은 10개?

우리는 컴퓨터로 유튜브를 보면서 카카오톡을 하고, 백그라운드에서는 백신 프로그램이 돌아가는 '멀티태스킹' 환경에 익숙합니다. 그런데 놀라운 사실은, 컴퓨터의 두뇌인 CPU 코어(Core)는 원칙적으로 한 번에 딱 한 가지 일만 할 수 있다는 것입니다.

그렇다면 도대체 어떻게 동시에 여러 프로그램이 돌아가는 걸까요? 정답은 '속도'에 있습니다. CPU는 우리가 상상할 수 없을 정도로 빠르게 일을 번갈아 가며 처리합니다. 마치 요리사 한 명이 파를 썰다가, 0.1초 만에 국을 젓고, 다시 0.1초 만에 고기를 뒤집는 것과 같습니다.

오늘 14편에서는 이 눈속임의 기술인 '스레드(Thread)''컨텍스트 스위칭(Context Switching)'의 과학적 원리를 파헤쳐 봅니다.

본론 1: 프로세스(Process)와 스레드(Thread)의 차이

컴퓨터 공학에서 작업의 단위는 크게 두 가지로 나뉩니다. 이를 '식당'에 비유해 보겠습니다.

  • 프로세스 (Process): 독립된 식당 건물입니다. (예: 엑셀, 카카오톡, 크롬)
    - 각자의 주방(메모리)이 따로 있어서 재료를 공유하지 않습니다. 건물을 짓는 데 비용(자원)이 많이 듭니다.
  • 스레드 (Thread): 식당 안에서 일하는 직원들입니다.
    - 하나의 식당(프로세스) 안에서 주방(메모리)을 공유합니다. 직원을 채용하는 비용이 저렴하고 협업이 빠릅니다.

즉, 멀티 스레드란 하나의 프로그램 안에서 여러 직원을 고용해 동시에 여러 작업을 수행하게 만드는 기술입니다.

본론 2: 시분할(Time Slicing), 찰나의 마술

NASA의 탐사 로봇은 주행을 하면서 동시에 지구로 사진을 전송하고, 배터리 온도를 체크해야 합니다. CPU 코어가 하나뿐이라면 이 3가지 일을 어떻게 할까요? 시간을 아주 잘게 쪼개서 나눠 씁니다.

이를 시분할 시스템(Time Slicing)이라고 합니다.

  • 0.00ms ~ 0.05ms: 주행 모터 제어
  • 0.05ms ~ 0.10ms: 사진 데이터 전송
  • 0.10ms ~ 0.15ms: 온도 센서 확인
  • (반복)

이 전환 속도가 인간의 인지 능력을 훨씬 뛰어넘기 때문에, 우리 눈에는 3가지 일이 동시에(Simultaneously) 일어나는 것처럼 보이는 것입니다. 이때 작업 A에서 작업 B로 넘어가는 전환 과정을 '컨텍스트 스위칭(Context Switching)'이라고 부르는데, 이것이 너무 잦으면 오히려 성능이 떨어지는 오버헤드(Overhead)가 발생하기도 합니다.

본론 3: 공유의 비극, 경쟁 상태(Race Condition)

스레드는 메모리(재료)를 공유한다고 했습니다. 여기서 치명적인 문제가 발생할 수 있습니다.

만약 스레드 A와 스레드 B가 동시에 "잔고 변수(Money)"에 접근하면 어떻게 될까요?
A가 만 원을 입금하는 도중에, B가 출금을 시도한다면? 잔고 계산이 꼬여서 돈이 증발하거나 복사되는 심각한 버그가 발생합니다. 이를 '경쟁 상태(Race Condition)'라고 합니다.

멀티 스레드는 속도를 높여주지만, 데이터의 무결성을 깨뜨릴 수 있는 위험한 기술이기도 합니다. 그래서 개발자는 공유 자원을 보호하기 위한 잠금장치(Lock)를 걸어야 합니다.

결론: 동시성은 환상이지만 효과적이다

지금까지 멀티 스레드의 작동 원리에 대해 알아보았습니다. 물리적으로 동시가 아닐지라도, 이 기술 덕분에 우리는 쾌적한 디지털 환경을 누리고 있습니다.

하지만 앞서 말했듯, 여러 스레드가 자원을 공유하다가 서로 자원을 차지하겠다고 싸우면 시스템이 멈춰버리는 최악의 상황이 발생합니다.

다음 [Part 15. 데드락(Deadlock): 4거리 교차로에서 멈춰버린 시스템] 편에서는, 멀티 스레드 프로그래밍의 최대 난제인 '교착 상태'와 이를 해결하는 '교통정리' 기술에 대해 알아보겠습니다.