Какие проблемы решает GIL

Python Senior Без компании
Какие проблемы решает GIL
Ответы
GIL (Global Interpreter Lock) в CPython решает проблему управления памятью в многопоточных программах. Он предотвращает race conditions при доступе к объектам Python, так как только один поток может выполнять Python-код в любой момент времени. **Основные задачи GIL:** - **Безопасность памяти:** Исключает одновременное изменение объектов разными потоками. - **Упрощение реализации CPython:** Уменьшает сложность управления ссылочными счетчиками (reference counting). **Пример проблемы без GIL:** ``` 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 из-за race condition ``` **Недостатки GIL:** - Ограничивает параллелизм CPU-bound задач (решается через процессы или альтернативные интерпретаторы). - Не влияет на I/O-bound задачи (потоки все равно эффективны при ожидании операций ввода-вывода).