[Python] Event Loop

2026. 2. 16. 12:04·Language/Python

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에 등록된 형태의 객체

 

단계

  1. 코드라인을 실행하며 함수가 호출될 때마다 call stack에 추가합니다.
  2. 일반적인 함수는 call stack에서 바로 해결됩니다.
  3. Task가 await을 만나면, call stack에서 빠져나가 대기 상태에 들어갑니다. 이 때 task는 event loop에게 제어권을 돌려줍니다.
  4. Event loop는 call stack에서 다음 함수를 실행시킵니다.
  5. 대기 상태에 들어갔던 task가 작업을 완료하면, ready queue의 맨 끝으로 들어갑니다.
  6. 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
'Language/Python' 카테고리의 다른 글
  • [Python] Syntax | 04. import
  • [Python] Syntax | 03. Decorator(@)
  • [Python] Library | 08. asyncio
  • [Python] Closure
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (289) N
      • CS (40) N
        • CV (2)
        • PS (37) N
      • Reveiw (19)
        • Paper (19)
        • Github (0)
      • ML (13)
        • Pytorch (5)
      • Language (68)
        • Python (17)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ML
    ts
    ReactNative
    deploy
    modal
    GAN
    figma
    DB
    API
    review
    ps
    Three
    Git
    python
    nodejs
    SOLID
    js
    postgresql
    mongo
    CV
    react
    frontend
    Express
    PyTorch
    backend
    CSS
    CS
    PRISMA
    vscode
    expo
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[Python] Event Loop
상단으로

티스토리툴바