Sobes.tech
Back to questions
Junior — Middle
50

Можешь объяснить, как работает глобальная блокировка интерпретатора в Python и какие последствия она имеет для многопоточности?

Answer from AI

sobes.tech AI

Глобальная блокировка интерпретатора (GIL) в Python — это механизм, который позволяет одновременно исполнять байт-код Python только в одном потоке. Это связано с тем, что стандартная реализация CPython не является полностью потокобезопасной на уровне интерпретатора.

Из-за GIL, даже если у вас несколько потоков, работающих в одном процессе, в каждый момент времени активен только один поток Python-кода. Это ограничивает эффективность многопоточности для CPU-интенсивных задач.

Однако для задач ввода-вывода (например, сетевые операции, чтение файлов) многопоточность с GIL работает достаточно эффективно, так как потоки часто блокируются на ожидании, и GIL освобождается.

Если нужна настоящая параллельность для вычислений, обычно используют:

  • Многопроцессность (модуль multiprocessing), где каждый процесс имеет свой интерпретатор и GIL.
  • Использование альтернативных реализаций Python без GIL (например, Jython, IronPython).

Пример с потоками, где GIL ограничивает прирост производительности:

import threading
import time

def cpu_bound():
    count = 0
    for _ in range(10**7):
        count += 1

threads = []
start = time.time()
for _ in range(4):
    t = threading.Thread(target=cpu_bound)
    t.start()
    threads.append(t)

for t in threads:
    t.join()
end = time.time()
print(f"Время выполнения: {end - start} секунд")

Несмотря на 4 потока, время будет близко к последовательному выполнению из-за GIL.