파이썬 3.13 성능 향상 완전 정복: Free-Threading

  • 관리자 신현승
  • 카테고리: 개발이슈
  • 조회수: 572
  • 작성일:

이 글은 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 모듈을 사용해 문제를 해결했습니다. 하지만 다음과 같은 제약이 존재합니다:

  1. 메모리 오버헤드: 각 프로세스는 독립된 메모리 공간 필요.
  2. 통신 비용: 프로세스 간 데이터 교환 시 오버헤드 발생.
  3. 시작 시각: 프로세스 생성을 스레드보다 느림.

실제 활용 사례: 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를 이용하여 요약한 내용입니다.

원문보기


코멘트 (0)