Zettelkasten

Python 동시성 프로그래밍

·수정 2026.04.23·수정 1

GIL (Global Interpreter Lock)

  • 하나의 스레드만이 CPU를 점유하도록 하는 락

concurrent.futures

  • 스레딩 단점
    • 관련된 오류나 경합조건을 고치기가 어려움
    • 더 많은 OS 자원을 사용함

asyncio

  • 코루틴: async def 로 정의된 비동기 함수
  • eventloop: 실행가능한 비동기 작업을 관리하는 루프
  • Task: 이벤트 루프에서 실행되는 코루틴
  • Future: 나중에 완료될 작업을 나타내는 객체

awaitable: await 키워드를 붙일 수 있는 최소 조건

  • 대안 Future or Task로 감싸는 것
graph TD;
    Awaitable --> Coroutine
    Awaitable --> Future
    Future --> Task

await의 역할

  • await는 뒤에 있는 코루틴을 eventloop에 실행해달라고 등록
  • 등록한 코루틴이 끝날때 돌려받기를 기대하며 실행권을 eventloop에 반환함

스레드당 실행중인 EventLoop는 하나 아무리 많은 코루틴을 하나의 EventLoop에서 동시 실행해도 결국 single thread로 돌아감

  • 실행 권한이라는 건 뭘까
    • 실행권(Time Slice)
      • CPU 코어 한개는 한번에 하나의 작업만 실행할 수 있음

concurrent.futures와의 관계

  • concurrent.futures의 ThreadPoolExecutor, ProcessPoolExecutor는 너무 저수준의 api
  • 스레드 경합 문제는 해결하기 어려움

concurrent.futures.ThreadPooolExecutor 동작

동시성 구현 5가지 종류(자원관리, 서버 아키텍쳐 관점) z 작성중 - 동시성 모델의 종류(실행 제어 관점)