Junior — Middle
Waarom leidt het gebruik van multithreading in Python niet tot een merkbare versnelling bij het uitvoeren van zware CPU-afhankelijke berekeningen?
sobes.tech AI
Antwoord van AI
In de standaardimplementatie van Python gebruikt CPython GIL (Global Interpreter Lock), een globale lock van de interpreter die het mogelijk maakt om slechts één Python-bytecode tegelijk in één thread uit te voeren. Hierdoor levert multithreading geen prestatieverbetering bij zware CPU-afhankelijke berekeningen, omdat threads niet echt parallel op meerdere cores kunnen worden uitgevoerd.
Om deze beperking te omzeilen, worden gebruikt:
- Multiprocessing (module multiprocessing), waarbij elk proces zijn eigen interpreter en GIL heeft.
- Gebruik van C-extensies die GIL vrijmaken tijdens berekeningen.
- Alternatieve Python-implementaties zonder GIL (bijvoorbeeld Jython, IronPython).
Voorbeeld van het gebruik van multiprocessing voor parallelle berekeningen:
from multiprocessing import Pool
def heavy_calc(x):
# Een zware CPU-afhankelijke functie
return x * x
if __name__ == '__main__':
with Pool(4) as p:
results = p.map(heavy_calc, range(10))
print(results)