🧠 코루틴(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 |