본문 바로가기
Android/Coroutine

코루틴과 스레드, 그리고 프로세스: 그 유사성과 차이

by quessr 2025. 1. 24.

 

운영체제를 공부하다 보면 자연스럽게 프로세스(Process)와 스레드(Thread)의 개념을 배우게 됩니다.

최근 코루틴(Coroutine)을 공부하면서, 스레드와 비슷한 점이 많아 보이면서도 작동 방식에는 차이가 있다는 점이 흥미로웠습니다.
특히, 운영체제에서 배운 프로세스와 스레드의 개념이 코루틴을 이해하는 데 큰 도움이 될 수 있다는 생각이 들어, 나중에 참고할 수 있도록이 세 가지를 비교하며 정리해 보았습니다.


프로세스와 스레드 간단 정리

프로세스(Process)란?

  • 실행 중인 프로그램을 뜻하며, 운영체제가 관리하는 독립적인 실행 단위입니다.
  • 각 프로세스는 자체 메모리(Code, Data, Heap, Stack)를 가지고 있으며, 다른 프로세스와 자원을 공유하지 않습니다.

스레드(Thread)란?

  • 하나의 프로세스 내에서 실행되는 작은 실행 단위입니다.
  • 프로세스의 메모리(Code, Data, Heap)를 공유하며, 프로세스 안에서 병렬 작업을 수행합니다.
  • 여러 스레드가 하나의 프로세스를 구성할 수 있습니다.

코루틴(Coroutine) 간단 소개

코루틴은 스레드보다 가벼운 실행 단위로, 비동기 작업을 효율적으로 처리하기 위해 사용됩니다.

  • 스레드처럼 병렬 처리가 가능해 보이지만, 운영체제가 아닌 애플리케이션 내부에서 관리됩니다.
  • 실행 흐름을 프로그래머가 명시적으로 제어(suspend, resume)할 수 있다는 점에서 차별화됩니다.

프로세스/스레드와 코루틴의 유사점

  1. 병렬 처리와 작업 분할
    •    프로세스와 스레드는 작업을 나눠 병렬로 실행하는 구조입니다.
    •    코루틴 역시 작업을 작은 단위로 분할해 병렬 실행이 가능하도록 보입니다(실제로는 동시성 처리).
  2. 독립적인 실행 단위
    •    스레드가 프로세스 내에서 독립적으로 동작하는 것처럼, 코루틴도 독립적인 실행 흐름을 가집니다.
    •    여러 코루틴이 서로 간섭하지 않으면서 작업을 처리합니다.

프로세스/스레드와 코루틴의 차이점

1. 운영체제 vs 애플리케이션 수준 관리

  • 스레드는 운영체제가 스케줄링하고 실행 흐름을 제어합니다.
  • 코루틴은 애플리케이션 내에서 관리되며, 실행 흐름을 프로그래머가 직접 제어합니다.

2. 문맥 전환(Context Switching) 비용

  • 스레드: 문맥 전환 시 운영체제가 레지스터, 스택 등 시스템 자원을 저장/복원해야 하므로 비용이 큽니다.
  • 코루틴: 문맥 전환이 애플리케이션 내에서 이루어져 비용이 훨씬 적습니다.

3. 비동기 처리에 최적화

  • 스레드는 비동기 작업을 처리하려면 추가적인 도구(Future, Promise 등)가 필요합니다.
  • 코루틴은 비동기 작업을 더 자연스럽고 효율적으로 처리할 수 있도록 설계되었습니다.

코루틴을 이해하는 데 프로세스와 스레드 개념이 왜 도움이 될까?

운영체제에서 배우는 프로세스와 스레드의 개념은 코루틴을 이해하는 데 있어 중요한 기반 지식을 제공합니다.

  • 스레드 위에서의 코루틴 동작: 코루틴은 스레드 위에서 동작하며, 하나의 스레드가 여러 코루틴을 관리합니다.
    이는 스레드가 프로세스의 자원을 공유하며 동작하는 방식과 유사합니다.
  • 스케줄링 방식: 스레드는 운영체제가 선점형으로 스케줄링하지만, 코루틴은 명시적으로 실행 흐름을 전환하는 비선점형 스케줄링을 사용합니다.

코루틴의 가벼운 실행 방식과 동작 원리를 이해하면, 스레드와의 차이를 더 명확히 알 수 있습니다.

이러한 점에서 운영체제의 기본 개념을 알고 있다면 코루틴의 구조와 작동 방식을 쉽게 이해할 수 있습니다.


정리하며

운영체제의 프로세스와 스레드 개념을 알면 코루틴의 동작 방식을 이해하는 데 도움이 되지 않을까 합니다.

  • 프로세스와 스레드의 자원 관리 및 실행 원리를 알면 코루틴이 어떻게 가벼운 실행 단위로 동작하는지 자연스럽게 연결할 수 있습니다.
  • 코루틴은 스레드보다 가벼운 실행 단위로 비동기 작업을 처리하는 데 최적화되어 있지만, 그 근본적인 개념은 스레드와 유사한 부분이 많습니다.

 

반응형