[Python] GIL이란? 파이썬에서의 멀티쓰레드Language/Python2024. 5. 6. 17:38
Table of Contents
파이썬 GIL이란?
파이썬은 다른 언어 (C++ or Java)의 멀티쓰레드와 다른 점이 있다.
멀티 쓰레드가 멀티 쓰레드가 아니다
무슨 말이냐 하면 동시성을 만족하지 못한다.
위의 그림처럼 쓰레드를 3개로 나누어 실행하더라도 GIL를 가진 쓰레드만 실행되고, 나머지 쓰레드는 GIL release 되기를 기다린다.
동시성을 갖기 위해서는 멀티 프로세싱을 활용해야 한다.
다만 멀티 프로세스는 멀티 쓰레드에 비해 오버헤드나 데이터 교환 어려움 등의 단점이 있다.
멀티 쓰레드의 사용
사실상 CPU 코어나 쓰레드를 못굴리는데, 멀티쓰레드를 언제 사용하냐
I/O Bound를 해결할 때 사용한다.
DB, API, UI 등의 작업들은 CPU 작업 속도에 비해 현저히 느리기에 CPU 입장에서는 I/O 요소들로 인해 작업 손실을 일으킬 때가 있다.
그럴 때, 멀티 쓰레드를 도입하면 I/O 바운드를 해결할 수 있다.
이걸 활용하는게 비동기식 처리이다. (FastAPI가 빠르다고 하는 이유 중 하나)
물론 CPU 바운드는 멀티 프로세싱을 이용해야 한다.
GIL 해제
PC 시장은 싱글 코어의 성능을 올리는 것보다 코어 숫자를 늘리는 방향이 성능향상 더 크고 최근 CPU 들도 16, 24, 40 코어 까지도 있기에 파이썬이 CPU 제대로 활용하지 못하느 것을 파이썬 재단도 알고 있고, GIL을 없애기 위한 시도를 해왔다.
python 3.12에서 실험실 모드로 사용
python 3.13에서 패키지 형태로 사용이 예상된다. (3.13이 기대되는 이유)
'Language > Python' 카테고리의 다른 글
[Python] 파이썬 개발자 면접 질문 (0) | 2024.05.26 |
---|---|
[Python] Pandas, Numpy 성능 향상 (feat.Pandas vs Numpy) (0) | 2024.05.06 |
Python 3.11 달라진 점 - 업데이트 (0) | 2024.01.15 |
자료구조 - List, Dict, Set, Tuple (0) | 2022.10.27 |
sort, sorted ( Tim sort, 팀 소트) (0) | 2022.10.23 |