본문 바로가기

개발/OS

코루틴이란?

 

🧠 코루틴(Coroutine) 이란?

협력적(concurrent)이고, 중단 가능한 함수
일반 함수처럼 실행되지만, 중간에 멈췄다가 다시 이어서 실행할 수 있는 특성을 가짐.

🔁 코루틴 vs 일반 함수

일반 함수 코루틴

실행 흐름 호출되면 끝날 때까지 실행 중간에 멈췄다가(suspend) 다시 이어서(resume) 실행 가능
상태 유지 호출할 때마다 새로 시작 상태(변수 등) 유지
사용 목적 순차 처리 비동기 처리, 이벤트 루프, IO 효율적 처리

🚦 코루틴 vs 스레드

구분 스레드(Thread) 코루틴(Coroutine)

실행 단위 OS가 스케줄링하는 실행 단위 사용자 레벨의 경량 실행 단위
생성 비용 비교적 무거움 (스택, 컨텍스트 등) 가볍고 수천 개도 생성 가능
전환 비용 커널 개입 (컨텍스트 스위칭) 유저 레벨 전환 → 빠름
병렬성 멀티코어 활용 가능 (진짜 병렬) 단일 쓰레드 내에서 동시성 (병렬 아님)
Thread, Runnable async/await, suspend fun (Kotlin), go (Go), async def (Python)

💡 코루틴의 핵심 키워드

  • suspend (중단): 함수를 멈추고, 나중에 다시 이어서 실행 가능
  • resume (재개): 중단된 지점에서 이어서 실행
  • await (비동기 대기): 다른 작업이 끝날 때까지 효율적으로 대기

✨ 코루틴 사용하는 언어 예시

  • Kotlin: suspend fun, launch, async
  • Python: async def, await
  • Go: go func() → 고루틴 (goroutine)
  • C++20: co_await, co_yield
  • Java (Project Loom 예정): 가벼운 스레드인 Virtual Thread

🧪 예시 (Python)

import asyncio

async def say_hello():
    print("Hello")
    await asyncio.sleep(1)  # 비동기적으로 1초 기다림
    print("World")

asyncio.run(say_hello())

이 예시는 하나의 스레드에서 비동기적으로 실행되며, 다른 작업을 블로킹하지 않고도 기다릴 수 있는 방식이에요.


📌 언제 쓰면 좋을까?

  • 대규모 동시성 처리 (ex. 수천 명의 사용자 요청)
  • 비동기 IO 처리 (DB, 네트워크 등)
  • 메모리, 스레드 자원 절약이 필요한 상황
  • 복잡한 콜백 지옥 대신 깔끔한 코드 작성

🔚 정리

코루틴은...

스레드보다 가볍고 효율적인 실행 단위입니다.
멈췄다 다시 시작할 수 있어, 비동기/동시성 처리에 매우 적합합니다.
현대 프로그래밍 언어 대부분이 코루틴을 지원하고 있습니다.

 

'개발 > OS' 카테고리의 다른 글

멀티 스레드(multi thread)  (0) 2025.05.26
페이징 기법  (0) 2025.05.26
cpu bound, io bound의 의미  (0) 2025.05.25
스레드의 종류  (0) 2025.05.24