PromleeBlog
sitemapaboutMe

posting thumbnail
스레드란 무엇일까? - 하루 10분 운영체제 4일차
What is a thread? - 10 Minutes of OS Day 4

📅

🚀

들어가기 전에🔗

현대의 컴퓨터는 여러 작업을 동시에 수행하는 것이 기본입니다. 예를 들어, 음악을 들으며 웹 브라우징을 하고, 동시에 파일을 다운로드할 수 있죠. 이렇게 여러 작업을 병행 처리할 수 있도록 도와주는 핵심 개념이 바로
스레드(thread)
,
병행성(concurrency)
입니다.
이 개념은 성능 최적화뿐만 아니라, 기술 시험에서 매우 자주 등장하므로 명확히 이해해 두는 것이 좋습니다.

🚀

스레드란 무엇인가요?🔗

<- 이거 아닙니다 🥲
스레드를 이해하기 위해서는 프로세스를 이해해야 합니다. 프로세스에 대해서는 프로세스란 무엇일까? - 하루 10분 운영체제 3일차을 참고해주세요.
스레드는
프로세스 내에서 실행 흐름을 나누는 가장 작은 단위
입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이들은 같은 자원(CPU, 메모리)을 공유하면서도 독립적으로 실행됩니다.
예를 들어, 메신저 앱에서는 한 스레드는 메시지를 수신하고, 다른 스레드는 화면을 그리며, 또 다른 스레드는 알림음을 재생하는 식으로 역할을 나눌 수 있습니다.

🚀

코어란 무엇인가요?🔗

코어는 물리(하드웨어)적으로 존재하는 것입니다. 원래 컴퓨터에서 하나의 코어는 하나의 작업만 처리할 수 있고, 여러 개의 코어가 있어야 여러 작업을 동시에 처리할 수 있었습니다.
하지만 스레드라는 개념이 생기며 하나의 코어에 여러 개의 프로세스를 실행할 수 있도록 만들어졌습니다. 뒤에서 설명하겠지만 스레드는 OS에서 사용하는 일종의 '단위'입니다.
이렇게 하나의 코어에 여러 개의 스레드를 실행할 수 있도록 만든 것이 멀티코어 프로세서입니다.

다중 코어 프로그래밍🔗

오늘날 대부분의 컴퓨터는
다중 코어(multi-core)
CPU를 사용합니다. 각 코어가 독립적으로 작업을 처리할 수 있기 때문에, 병렬로 스레드를 실행하면 전체 프로그램의 속도를 크게 향상시킬 수 있습니다.
운영체제는 각 코어에 스레드를 적절히 배분하여 효율적인 병렬 처리를 가능하게 합니다. 하지만 모든 작업이 병렬 처리에 적합한 것은 아니므로, 적절한 스레드 설계가 필요하다고 합니다.

🚀

다중 스레드 모델🔗

다중 스레딩을 구현하는 방식에는 크게 세 가지 모델이 있습니다
사용자 수준 스레드는 운영체제의 도움 없이 사용자 영역에서만 동작하므로 빠르지만, 하나가 막히면 전체가 멈출 수 있습니다. 반면 커널 수준 스레드는 안정적이나 느릴 수 있고, 혼합 모델은 그 장점을 조합한 형태입니다.
사용자 수준 스레드
[ User Thread 1 ]      ↘
[ User Thread 2 ] ——→ [ Kernel Thread 1 ]
[ User Thread 3 ]      ↗

커널 수준 스레드
[ User Thread 1 ] ——→ [ Kernel Thread 1 ]
[ User Thread 2 ] ——→ [ Kernel Thread 2 ]
[ User Thread 3 ] ——→ [ Kernel Thread 3 ]

혼합 모델
[ User Thread 1 ]      ↘
[ User Thread 2 ] ——→ [ Kernel Thread 1 ]
[ User Thread 3 ] ——→ [ Kernel Thread 2 ]
[ User Thread 4 ]      ↗

🚀

스레드 라이브러리🔗

프로그래밍 언어에서는 스레드를 쉽게 다룰 수 있도록
스레드 라이브러리
를 제공합니다. 대표적으로 다음과 같은 라이브러리가 있습니다
예: Java에서 스레드 생성
Thread t = new Thread(() -> {
    System.out.println("Hello from thread");
});
t.start();

🚀

암묵적 스레딩🔗

암묵적 스레딩은 프로그래머가 명시적으로 스레드를 만들지 않아도, 시스템이나 라이브러리가 내부적으로 자동으로 병렬 처리를 수행해 주는 방식입니다. 대표적인 예로 OpenMP, 멀티 쓰레드 라이브러리, 쓰레드 풀 등이 있습니다.
예를 들어, Python의 concurrent.futures 모듈은 스레드 풀을 자동으로 관리해줍니다.

🚀

스레드와 관련된 문제들🔗

스레드를 사용하면 효율이 높아지지만, 동시에 해결해야 할 문제가 생깁니다. 대표적인 문제는
경쟁 조건(race condition)
데드락(deadlock)
입니다.
경쟁 조건 예시
경쟁 조건 예시
이러한 문제를 해결하기 위해
뮤텍스(mutex)
,
세마포어(semaphore)
,
모니터(monitor)
같은 동기화 도구가 사용됩니다. 이런 동기화 도구들은 6일차에서 자세히 살펴보겠습니다.

🚀

운영체제 사례🔗

실제 운영체제는 다양한 스레드 모델을 채택하고 있습니다
또한 Android, iOS 등 모바일 운영체제도 멀티스레드를 적극 활용하여 사용자 경험을 높이고 있습니다.

🚀

요약🔗

이번 글에서는 스레드와 병행성이라는 개념을 중심으로, 다중 코어 환경에서의 병렬 처리 방식과 스레드가 갖는 장점과 문제점에 대해 알아보았습니다.
기술 면접에서 자주 등장하는
스레드 간 동기화
,
데드락
,
멀티스레딩 구현 방식
등은 본문에 있는 예시들과 함께 꼭 숙지해 두시길 바랍니다.
다음 편에서는 CPU의 자원을 어떻게 효율적으로 분배하는지를 다루는
CPU 스케줄링
에 대해 살펴보겠습니다.

참고🔗