요약
- Coroutine은 실행 중간에 멈췄다가 멈춘 지점에서 다시 시작할 수 있는 함수
- I/O 대기 시간에 다른 작업을 처리할 수 있어 효율적
본문
Thread와의 차이
| 구분 | Coroutine | Thread |
|---|---|---|
| 실행 공간 | User mode | Kernel mode |
| 스케줄링 | 협력적 (Cooperative) | 선점형 (Preemptive) |
| 전환 시점 | 명시적 키워드 (await, yield) |
OS가 강제로 전환 |
협력적 스케줄링
Coroutine은 특정 키워드(await, yield, suspend)를 통해 스스로 실행을 양보한다. 양보하는 순간 다른 Coroutine이 CPU를 점유할 수 있게 된다.
async def fetch_data():
response = await http.get(url) # 여기서 양보, 다른 코루틴 실행 가능
return response.json()
왜 쓰는가
I/O 작업(네트워크, 파일, DB)은 CPU가 기다리기만 하는 시간이 길다. Coroutine을 쓰면 대기 시간 동안 다른 Coroutine이 CPU를 사용할 수 있어 자원을 효율적으로 활용한다.