Junior — Middle
Por que o uso de multithreading em Python não leva a uma aceleração perceptível na execução de cálculos pesados dependentes da CPU?
sobes.tech IA
Resposta da IA
Na implementação padrão do Python, o CPython usa o GIL (Global Interpreter Lock), que é um bloqueio global do interpretador que permite executar apenas um bytecode Python em um thread de cada vez. Por causa disso, a multitarefa não melhora o desempenho em cálculos pesados dependentes da CPU, pois os threads não podem realmente ser executados em paralelo em múltiplos núcleos.
Para contornar essa limitação, usam-se:
- Multiprocessamento (módulo multiprocessing), onde cada processo tem seu próprio interpretador e GIL.
- Uso de extensões em C que liberam o GIL durante os cálculos.
- Implementações alternativas do Python sem GIL (por exemplo, Jython, IronPython).
Exemplo de uso de multiprocessing para cálculos paralelos:
from multiprocessing import Pool
def heavy_calc(x):
# Uma função pesada dependente da CPU
return x * x
if __name__ == '__main__':
with Pool(4) as p:
results = p.map(heavy_calc, range(10))
print(results)