파이썬 3.13 성능 향상 완전 정복: Free-Threading
이 글은 IT와 번역가 David가 아서 파스텔(Arthur Pastel)의 글 <State of Python 3.13 Performance: Free-Threading>을 번역한 것입니다. 필자는 Python 개발자이자 CodSpeed의 창업자로, 파이썬 3.13의 성능 변화와 ‘Free-threading’ 기능을 소개합니다.
이 글은 필자의 허락을 받고 번역되었으며, 각주(*)는 ‘번역자주’입니다.
파이썬 3.13은 성능 향상을 중점적으로 다룬 최근 릴리스입니다. 주요 변경 사항은 다음과 같습니다:
- 전역 인터프리터 잠금(GIL)을 비활성화한 free-threaded 모드.
- 새로운 just-in-time(JIT) 컴파일러 추가.
mimalloc
할당자 포함.
*GIL: 파이썬 코드 실행을 제한하는 잠금 장치
*JIT: 프로그램 실행 중 코드의 성능을 향상시키는 컴파일 기술
*mimalloc: 고성능 메모리 할당 라이브러리
이 글에서는 free-threaded 모드의 구현과 성능 영향을 측정합니다.
Free-threaded 파이썬 소개
Free-threading은 파이썬 3.13의 실험적 기능으로 GIL 없이 실행됩니다.
기존의 멀티프로세싱 우회 방안
기존에는 multiprocessing
모듈을 사용해 문제를 해결했습니다. 하지만 다음과 같은 제약이 존재합니다:
- 메모리 오버헤드: 각 프로세스는 독립된 메모리 공간 필요.
- 통신 비용: 프로세스 간 데이터 교환 시 오버헤드 발생.
- 시작 시각: 프로세스 생성을 스레드보다 느림.
실제 활용 사례: PageRank 구현
PageRank 알고리즘은 계산 집약적이며 대규모 데이터셋을 처리합니다.
파이썬 3.12 이전의 멀티스레드 구현은 GIL로 인한 병목 현상이 발생했습니다.
- 각 프로세스에 그래프 복사 시 메모리 오버헤드 발생.
- 프로세스 간 결과 전송 시 비용 발생.
- 공유 상태 관리가 복잡함.
다양한 동시성 모델을 통한 구현
기본 구현 (단일 스레드)

멀티스레드 구현
행렬을 여러 청크로 나누어 각 스레드가 작업을 수행합니다.


청크를 할당하고 진행합니다.

멀티프로세스 구현
각 워커는 local_scores
배열을 반환하고, 메인 프로세스에서 점수를 취합합니다.

이 방식에는 오버헤드가 발생합니다.

성능 측정
점검을 위해 테스트 데이터를 생성합니다.

벤치마크 케이스 정의

깃허브 액션 워크플로우 설정

성능 측정 결과는?

분석 결과
- 3.12와 3.13 성능 유사,
multiprocessing
은 단일 스레드보다 느림. - GIL 비활성화된 3.13에서
threading
기반 구현이 가장 빠름. - free-threaded에서는 성능 저하 관찰. 3.14에서 개선 예정.
이번 측정을 통해 파이썬 3.13 free-threaded 빌드의 잠재력을 확인했습니다. 하지만 여전히 실험적인 단계입니다.
참고 사항
이번 벤치마크에 subinterpreters는 포함되지 않았습니다. 해당 방식은 속도가 느리지만 미래의 해결책이 될 수 있습니다.
<원문>
State of Python 3.13 Performance: Free-Threading
해당 기사는 GPT를 이용하여 요약한 내용입니다.