GIL (Global Interpreter Lock) hija mutex f'CPython (l-implimentazzjoni standard ta' Python) li tippermetti biss thread wieħed biex iwettaq Python bytecode fi żmien wieħed. Dan ifisser li thread Python ma jistgħux jwettqu kod Python b'paralelliżmu veru fuq multiple CPU cores — konsiderazzjoni maġuri għall-concurrency.
X'jfisser GIL fil-prattika
Even with multiple threads on a multi-core CPU:
Only ONE thread runs Python bytecode at any instant.
→ Threading does NOT give CPU-bound parallelism in CPython.
Id-distinzjoni ewlenija: CPU-bound vs I/O-bound
import threading
# ❌ CPU-bound work with threads — NO speedup (GIL serializes them)
def cpu_task():
sum(i * i for i in range(10_000_000)) # heavy computation
# 4 threads doing this run essentially as slow as 1 (GIL contention)
# ✅ I/O-bound work with threads — REAL benefit
def io_task():
response = requests.get(url) # waits on network — RELEASES the GIL while waiting
# while one thread waits on I/O, the GIL is freed for others → concurrency works
Nuwanza kruċjali: il-GIL hija rilaxxata matul I/O (network, file, sleep) u ġewwa ħafna estensjonijiet C. Allura threads jgħinu għal I/O-bound work (midja waits jintrepilluppaw), imma le għal CPU-bound work (GIL tisserializza l-kalkulazzjoni).
Ħidsa tal-GIL għal CPU-bound work
from multiprocessing import Pool
# ✅ multiprocessing uses separate PROCESSES, each with its own GIL → true parallelism
with Pool(4) as p:
results = p.map(cpu_task, data) # runs on 4 cores genuinely in parallel
Għal paralelliżmu CPU-bound, uża multiprocessing (prosessi separati jilluzzaw il-GIL wieħed), jew libraries (NumPy, eċċ.) li l-xogħol tqil tagħhom jdur f'C bil-GIL rilaxxata.
Il-gwida għad-deċizjoni
I/O-bound (network, files, DB) → threading or asyncio (GIL released on I/O)
CPU-bound (computation) → multiprocessing (or C-extension libraries)
Il-futur
Python 3.13+ introduces an EXPERIMENTAL free-threaded (no-GIL) build,
and work continues to reduce the GIL's impact — but it remains the default reality.
Għaliex dan hu importanti
GIL hija waħda mill-aktar karatteristiċi importanti ta' Python — u aktar misftieħma.
Tispjega għaliex l-użu ta' threads għal xogħol CPU-qalb ma jagħti l-ebda speedup (żball komuni), u għaliex l-għodda concurrency korretta tiddependi fuq il-workload: threading/asyncio għal I/O-bound (fejn GIL tiġi rilaxxata matul il-waits) u multiprocessing għal CPU-bound (prosessi separati għal paralelliżmu veru).
Il-misftieħma tal-GIL twassal għal kod concurrency ineffettiv li ma jiskalax.
Il-għarif tagħha — u d-deċizjoni I/O-vs-CPU li ddrivaha — essenzjali biex tikteb Python concurrent li verament jitwettaq.
