본문 바로가기
Computer Science/Operating System

[Operating System & Concurrency] 프로세서, 프로세스, 스레드, 코루틴의 개념과 관계 정리

by quessr 2025. 3. 6.

 

운영체제를 공부하면서 여러 번 관계성을 정리하려 했지만, 학습할 때마다 다시 헷갈리는 반복이 이어졌습니다.

흐름을 제대로 정리하고자 여러 유튜브 강의를 찾아보던 중, 유튜버 얄팍한 코딩사전님의 "프로세스는 뭐고 스레드는 뭔가요?" 영상을 보고 개념을 정리하는 데 많은 도움을 받았습니다.

이 글은 해당 영상에서 설명된 내용을 바탕으로 나중에 다시 참고하기 위해 정리한 글입니다.

또한, 프로세서, 프로세스, 스레드의 관계를 이해한 후, 처음에는 스레드와 비슷하게 보였던 코루틴의 개념까지 정리하고 싶어 관련 블로그 글을 찾아 읽었습니다.

이 과정에서 발견한 글을 통해 스레드와 코루틴의 차이를 이해하는 데 큰 도움이 되었으며, 이를 바탕으로 최종적으로 본 글을 정리하게 되었습니다.

혹시라도 이 글을 보게 된 분이라면, 제 글을 가볍게 훑어본 후, 참고 자료로 링크를 걸어둔 영상과 블로그 글을 직접 보는 것을 추천드립니다.


1. CPU와 프로세서의 관계

컴퓨터에서 연산을 수행하는 핵심적인 장치는 CPU(중앙처리장치, Central Processing Unit)이며, 이는 여러 개의 프로세서(Processor)로 구성될 수 있습니다.

  • CPU: 컴퓨터의 연산을 담당하는 핵심 장치로, 여러 개의 프로세서를 포함할 수 있음
  • 프로세서: CPU의 핵심 연산을 수행하는 개별 장치
  • 코어(Core): 프로세서 내부에서 실제 연산을 수행하는 개별 유닛

즉, CPU = 프로세서들의 집합체라고 이해할 수 있으며, 하나의 CPU가 여러 개의 코어를 포함할 수 있습니다.

과거에는 CPU의 성능을 높이기 위해 클럭 속도를 올리는 방식이 사용되었지만, 발열과 전력 소모의 문제로 인해 현재는 멀티코어 프로세서를 활용하는 방식이 일반적입니다.


2. 프로그램과 프로세스의 차이

  • 프로그램: 컴퓨터가 실행할 수 있는 파일
  • 프로세스: 프로그램이 실행되어 돌아가고 있는 상태, 즉 컴퓨터가 특정 작업을 수행하는 상태

운영체제는 여러 프로세스를 함께 실행하여 우리가 다양한 작업을 동시에 수행할 수 있도록 합니다.


3. 프로세서를 활용한 동시성과 병렬성

운영체제는 여러 프로세스를 동시에 실행하는 방식으로 동시성(concurrency)병렬성(parallelism)을 사용합니다.

  • 동시성: 하나의 프로세서가 여러 작업을 번갈아가며 처리하는 방식
    • 예: 운영체제가 여러 프로세스를 조금씩 실행하면서 빠르게 전환하여 사용자가 여러 작업을 동시에 수행하는 것처럼 보이게 함
    • Context Switching(문맥 교환): 실행 중인 작업을 다른 작업으로 변경하는 과정
    • 실제로는 순차적으로 실행되지만, 매우 빠르게 전환되기 때문에 동시에 실행되는 것처럼 느껴짐
  • 병렬성: 여러 개의 코어가 각기 다른 작업을 동시에 수행하는 방식
    • 멀티코어 프로세서(듀얼코어, 쿼드코어, 옥타코어 등)를 이용하여 여러 작업을 동시에 수행함
    • 과거에는 CPU 속도를 높이는 방식으로 성능을 개선했지만, 발열과 전력 소모 등의 물리적 한계로 인해 여러 개의 코어를 추가하는 방식으로 발전함

4. 프로세스와 스레드

한 프로세스 내에서도 여러 작업이 동시에 진행될 필요가 있습니다. 예를 들어 웹 브라우저는 게임을 다운로드하면서 동시에 다른 페이지를 탐색할 수 있어야 합니다. 이러한 작업의 갈래스레드(Thread)라고 합니다.

  • 프로세스: 운영체제로부터 독립된 메모리 공간과 자원을 할당받아 실행됨
  • 스레드: 프로세스 내에서 메모리와 자원을 공유하며 실행되는 작업 단위

즉, 프로세스는 독립적으로 실행되지만, 프로세스 내부에서는 여러 스레드가 같은 자원을 공유하면서 동시에 실행될 수 있습니다.


5. 코루틴(Coroutine)과 스레드의 차이

코루틴(Coroutine)은 기존의 스레드보다 더 가벼운 실행 단위로, 비동기 프로그래밍을 더 효율적으로 처리할 수 있도록 도와줍니다.

스레드(Thread)

  • 작업 단위: 스레드
  • 각 스레드는 독립적인 스택 메모리를 가짐
  • 동시성 보장 수단: Context Switching (운영체제가 스레드를 교체하며 실행)
  • 블로킹(Blocking): 다른 스레드의 작업이 끝날 때까지 기다려야 함

코루틴(Coroutine)

  • 작업 단위: Coroutine Object (객체 기반)
  • 코루틴은 Heap 메모리에 저장됨 (JVM 기준)
  • 동시성 보장 수단: 프로그래머가 직접 제어하는 Switching
  • 논블로킹(Non-Blocking): 코루틴이 멈춰도 같은 스레드에서 다른 코루틴이 실행될 수 있습니다.
  • Thread의 대안이 아니라, Thread를 더 세밀하게 활용하는 개념 입니다.
  • 작업 단위를 Object로 축소하여 하나의 Thread에서 다수의 Coroutine을 실행할 수 있습니다.
  • 작업마다 새로운 Thread를 할당하지 않으므로 Context Switching 비용과 메모리 낭비를 줄일 수 있습니다.
  • 같은 프로세스 내에서 Heap에 대한 Locking 문제를 최소화할 수 있습니다.
  • 코루틴은 스레드를 효율적으로 반환하고, 자동으로 컨텍스트 스위칭을 처리해서 더 간결하고 안전한 비동기 처리를 가능하게 만들었습니다.

즉, 코루틴은 스레드보다 가볍고, 하나의 스레드에서 여러 개의 코루틴을 실행할 수 있어 더 효율적입니다.


6. 비유를 통한 이해

컴퓨터에서 프로세서, 프로세스, 스레드, 코루틴의 관계를 식당에 비유하면 다음과 같습니다.

  • 프로세서(Processor) = 요리사: 여러 요리를 만들면서 주방을 운영하는 역할
  • 프로세스(Process) = 메뉴 주문: 손님이 주문한 각각의 요리
  • 스레드(Thread) = 조리 과정: 하나의 요리를 만들기 위한 여러 작업
  • 코루틴(Coroutine) = 조리 도우미: 같은 조리 기구를 공유하면서 요리를 효율적으로 진행함

참고:
https://youtu.be/iks_Xb9DtTM?si=E4AyZL6pVpNtEaom

https://velog.io/@haero_kim/Thread-vs-Coroutine-%EB%B9%84%EA%B5%90%ED%95%B4%EB%B3%B4%EA%B8%B0 

 

🤔 Thread vs Coroutine 전격 비교

비슷해보이는 두 녀석의 차이점을 파헤쳐보자!

velog.io

 

반응형