GIL 없는 파이썬(Free-Threaded Python)에서 asyncio 성능 확장하기

4 hours ago 2

결론

Python 3.14의 free-threaded 빌드에서 asyncio는 전역 인터프리터 잠금(GIL)을 제거하고 스레드별 상태 관리로 전환하여 진정한 병렬 실행을 가능하게 했습니다. 이로 인해 스레드 수에 따라 성능이 선형적으로 확장되어 여러 이벤트 루프를 병렬로 실행할 수 있게 되었고, 고성능 다중 스레드 asyncio 애플리케이션의 새로운 가능성을 열었습니다.


주요 변경 사항

  • GIL (Global Interpreter Lock) 제거: CPython의 free-threaded 빌드는 GIL을 제거하여 여러 스레드가 동시에 Python 코드를 실행할 수 있도록 합니다.
  • 스레드 안전성 확보: asyncio는 전역 데이터 구조 대신 스레드별 상태 관리를 사용하여 스레드 안전성을 확보했습니다.
    • 작업 저장: 전역 WeakSet 대신 스레드별 원형 이중 연결 리스트를 사용하여 잠금 경쟁과 약한 참조의 오버헤드를 제거했습니다.
    • 현재 작업 저장: "현재 작업"을 스레드 상태에 저장하여 더 빠르고 잠금이 없는 접근을 가능하게 했습니다.

성능 향상

  • 선형적인 성능 확장: 벤치마크 결과, free-threaded 빌드에서는 스레드 수가 증가함에 따라 asyncio의 성능이 선형적으로 향상되는 것으로 나타났습니다.
  • TCP 벤치마크: GIL이 활성화된 빌드에 비해 free-threaded 빌드에서 처리량이 크게 증가했습니다.
  • 웹 스크래핑 벤치마크: aiohttp를 사용한 웹 스크래핑 벤치마크에서 free-threaded 빌드의 여러 작업자를 사용했을 때 성능이 2배 이상 향상되었습니다.

Read Entire Article