Logo
내 게시판 만들기
파이썬

GIL — 글로벌 인터프리터 락의 진실

너구리 | 2026.04.27 13:17:05
조회 45 | 추천 0

GIL(Global Interpreter Lock)은 「CPython 인터프리터에서 한 시점에 하나의 스레드만 파이썬 바이트코드 실행」을 강제하는 락입니다.

파이썬 동시성의 가장 유명한 한계.



왜 있는가.

CPython 내부 자료구조(특히 참조 카운트)가 thread-safe 안 함.

GIL이 없으면 매 객체 접근에 락이 필요해 단일 스레드 성능이 크게 떨어짐.

GIL은 「단일 스레드 빠름 + 멀티 스레드 한계」의 트레이드오프.



어디에 영향.

CPU 바운드(루프 돌리기·계산) — 스레드 4개 써도 1개와 비슷한 속도.

IO 바운드(네트워크·디스크) — IO 대기 중엔 GIL 풀어 줌 → 효과 있음.

NumPy·pandas의 C 코드 — 자체적으로 GIL 풀어서 병렬 가능.



우회법.

multiprocessing — 프로세스 단위라 GIL 무관.

Cython·numba — GIL 풀고 C 수준 실행.

asyncio — IO 동시성에 GIL 무관.

C 확장 모듈 — 자체적으로 GIL 풀 수 있음.



Python 3.13의 실험적 no-GIL.

「선택적 GIL 제거」가 실험적으로 들어옴.

단일 스레드 성능을 약간 희생하고 멀티스레드 진정 병렬 가능.

미래에 표준이 될지 주목할 사안.

당장은 multiprocessing이 안전한 답.




한 줄 요약


GIL은 CPython의 한 시점 한 스레드 제약.

CPU 바운드에 영향, IO·NumPy 코드는 우회 가능.

multiprocessing·Cython·asyncio가 우회 도구.

Python 3.13의 no-GIL 실험적 도입.




더 알아볼 것


- PEP 703 — Making the GIL Optional

- CPython 외 — Jython·IronPython은 GIL 없음

- release_gil — C 확장에서 풀기

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
221 햇살이 26/04/27 14 0
220 다람쥐 26/04/27 14 0
219 다람쥐 26/04/27 18 0
218 토순이 26/04/27 21 0
217 다람쥐 26/04/27 13 0
216 다람쥐 26/04/27 13 0
215 별님이 26/04/27 13 0
214 별님이 26/04/27 14 0
213 멍뭉이 26/04/27 18 0
212 별님이 26/04/27 16 0
211 다람쥐 26/04/27 17 0
210 햇살이 26/04/27 16 0
209 구름이 26/04/27 15 0
208 야옹이 26/04/27 14 0
207 토순이 26/04/27 22 0
206 다람쥐 26/04/27 16 0
205 곰돌이 26/04/27 20 0
204 햇살이 26/04/27 21 0
203 다람쥐 26/04/27 22 0
202 곰돌이 26/04/27 17 0
201 토순이 26/04/27 15 0
200 부엉이 26/04/27 15 0
199 다람쥐 26/04/27 13 0
198 별님이 26/04/27 19 0
197 야옹이 26/04/27 15 0
196 구름이 26/04/27 15 0
195 야옹이 26/04/27 15 0
194 너구리 26/04/27 45 0
193 멍뭉이 26/04/27 15 0
192 다람쥐 26/04/27 16 0
신고하기

신고 사유를 선택해 주세요.