Event Loop는 프로그램이 single thread로 동작하면서도 여러 개의 작업을 동시에 실행하여 multi threading 처럼 보이게 해주는 시스템입니다.
구성요소
Python의 event loop는 크게 call stack과 ready queue 부분으로 나누어져 있습니다.

- call stack : 호출된 함수가 쌓이는 공간입니다. 해결된 함수는 call stack에서 제거됩니다. Event loops는 함수가 실행되는 동안 제어권을 넘겨줬다가 함수가 종료될 때 다시 제어권을 받습니다.
- ready queue : task*들이 call stack에 쌓이기 위해 대기하는 공간입니다. Call stack이 비면 task를 하나씩 빼서 call stack에 추가합니다.
*task : coroutine(비동기 함수)가 실행중인 상태로 event loop에 등록된 형태의 객체
단계
- 코드라인을 실행하며 함수가 호출될 때마다 call stack에 추가합니다.
- 일반적인 함수는 call stack에서 바로 해결됩니다.
- Task가 await을 만나면, call stack에서 빠져나가 대기 상태에 들어갑니다. 이 때 task는 event loop에게 제어권을 돌려줍니다.
- Event loop는 call stack에서 다음 함수를 실행시킵니다.
- 대기 상태에 들어갔던 task가 작업을 완료하면, ready queue의 맨 끝으로 들어갑니다.
- Call stack이 완전히 비어 있다면, ready queue에서 task를 꺼내 call stack에 추가합니다.
예외) asyncio.create_task()를 사용하면 코드에서 call stack을 거치지 않고 coroutine을 바로 ready queue로 보낼 수 있습니다.

기아 현상(Loop Starvation)
Ready queue의 task들은 현재 시점 call stack에 있는 일반함수가 모두 실행되기 전 까지는 실행되지 않습니다. 그래서 Coroutine이 아님에도 불구하고 시간이 많이 걸리거나, 일반 함수의 수가 많다면 ready queue의 task들은 오랫동안 실행되지 않게 됩니다. 이를 기아현상이라고 합니다.
728x90
'Language > Python' 카테고리의 다른 글
| [Python] Syntax | 04. import (0) | 2026.02.17 |
|---|---|
| [Python] Syntax | 03. Decorator(@) (0) | 2026.02.16 |
| [Python] Library | 08. asyncio (0) | 2026.02.15 |
| [Python] Closure (0) | 2026.02.15 |
| [Python] Garbage Collection (0) | 2026.02.15 |