Robocikowo>ROBOCIKOWO

Python — od podstaw do zaawansowanego · Concurrency II — wątki, procesy, GIL

GIL — co to i dlaczego jest ważny

Concurrency II — wątki, procesy, GIL

Wprowadzenie

GIL — Global Interpreter Lock — to mutex w CPython, który gwarantuje, że w danym momencie tylko JEDEN wątek wykonuje kod bytecode Pythona. To NIE jest cecha języka Python — to cecha implementacji CPython (PyPy ma własny GIL, Jython i IronPython nie mają go wcale). GIL upraszcza zarządzanie pamięcią (reference counting bez atomic ops na każdym dostępie) kosztem prawdziwej równoległości w czystym Pythonie.

GIL jest zwalniany przy operacjach blokujących I/O (read/write, socket, sleep), wywołaniach C-extensions oznaczonych Py_BEGIN_ALLOW_THREADS (np. NumPy, requests, file I/O) i co sys.setswitchinterval (domyślnie 5ms). Dlatego threading w CPython JEST szybsze dla zadań I/O-bound, ale NIE daje speedupu dla CPU-bound — tu trzeba multiprocessing lub C-extensions.

PEP 703 (Python 3.13+) wprowadza opcjonalny free-threaded build (python3.13t) — bez GIL. Płaci się ~10% performance overhead single-threaded i wymaga, aby C-extensions były thread-safe (opt-in flag). To ewolucja, nie rewolucja: GIL zostaje domyślnie do 3.16+.