Встречается на собеседованиях • сегодня

Почему Python не может работать без GIL

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

Основные причины:

  1. Управление памятью: CPython использует подсчёт ссылок для управления памятью. Без GIL несколько потоков могут одновременно изменить счётчик ссылок, что приведёт к утечкам или повреждению данных.
  2. C-расширения: Многие библиотеки написаны на C и не рассчитаны на многопоточность. GIL упрощает их интеграцию.

Пример:

python
import threading

counter = 0

def increment():
    global counter
    for _ in range(100000):
        counter += 1  # Без GIL это могло бы привести к race condition

threads = [threading.Thread(target=increment) for _ in range(10)]
for t in threads:
    t.start()
for t in threads:
    t.join()

print(counter)  # Может быть меньше 1_000_000 из-за GIL

Альтернативы: Для параллелизма лучше использовать multiprocessing или асинхронные подходы (asyncio).

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы