Sobes.tech
Back to questions
Middle
4

Что такое GIL в Python и какие ограничения он накладывает на многопоточность?

Companies where asked
fabriqeue

Answer from AI

sobes.tech AI

GIL (Global Interpreter Lock) — это механизм в CPython, который гарантирует, что в каждый момент времени только один поток выполняет байт-код Python. Это сделано для упрощения управления памятью и предотвращения проблем с конкурентным доступом к объектам.

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

  • Потоки не могут эффективно использовать несколько ядер процессора для выполнения Python-кода одновременно.
  • Многопоточность в Python подходит больше для задач ввода-вывода, где потоки часто блокируются, чем для CPU-bound задач.
  • Для CPU-bound задач часто используют multiprocessing (многопроцессность), чтобы обойти ограничение GIL.

Пример:

import threading
import time

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

threads = [threading.Thread(target=cpu_bound) for _ in range(4)]
start = time.time()
for t in threads:
    t.start()
for t in threads:
    t.join()
print(f"Время выполнения: {time.time() - start} секунд")

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