Sobes.tech
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