Middle+
Quais são as vantagens e desvantagens do Global Interpreter Lock (GIL) em Python?
sobes.tech IA
Resposta da IA
Vantagens:
- Simplifica a implementação do gestor de memória e do recolhedor de lixo, pois bloqueia o acesso concorrente.
- Melhora o desempenho de aplicações de thread única, evitando custos adicionais de sincronização de threads.
- Facilita a integração com bibliotecas escritas em C, que muitas vezes não são seguras para trabalhar com múltiplos threads simultaneamente.
Desvantagens:
- Impede a execução paralela do código em múltiplos núcleos de CPU dentro de um mesmo processo ao usar threads nativos do Python.
- Limita a escalabilidade de tarefas CPU-bound em aplicações multithread.
- Aplicações multithread com cálculos intensivos não podem aproveitar totalmente os processadores multinúcleo.
# Exemplo que demonstra o efeito do GIL
import threading
import time
def count(num):
i = 0
while i < num:
i += 1
start_time = time.time()
# Exemplo de thread único
count(100_000_000)
end_time = time.time()
print(f"Thread único: {end_time - start_time:.2f} segundos") # Tempo de execução do código de thread única
# Exemplo multithread (considera a mesma quantidade total)
# Em dois núcleos de CPU, sem GIL, o tempo deve ser aproximadamente metade do de thread única
# Com GIL, o tempo pode ser um pouco maior devido aos custos adicionais
t1 = threading.Thread(target=count, args=(50_000_000,))
t2 = threading.Thread(target=count, args=(50_000_000,))
start_time = time.time()
t1.start()
t2.start()
t1.join()
t2.join()
end_time = time.time()
print(f"Dois threads: {end_time - start_time:.2f} segundos") # Tempo de execução do código multithread