Какую проблему создает GIL в Python
Python
Senior
Без компании
Какую проблему создает GIL в Python
Ответы
GIL (Global Interpreter Lock) — это мьютекс, который защищает доступ к объектам Python, предотвращая одновременное выполнение байт-кода несколькими потоками. Основная проблема — ограничение параллелизма в CPU-зависимых задачах.
**Проблемы:**
- Многопоточные программы не ускоряются на многоядерных CPU, так как только один поток исполняется в любой момент.
- Вычислительные задачи (например, обработка чисел) страдают, в отличие от I/O-операций, где GIL менее критичен.
**Пример:**
```
import threading
def count():
n = 0
for _ in range(10_000_000):
n += 1
# Однопоточный вариант
count() # ~0.5 сек
# Многопоточный (2 потока)
t1 = threading.Thread(target=count)
t2 = threading.Thread(target=count)
t1.start(); t2.start()
t1.join(); t2.join() # ~1 сек (нет ускорения)
```
**Обходные пути:**
- Использование процессов (`multiprocessing`).
- Вынос тяжелых вычислений в C-расширения (с освобождением GIL).
- Асинхронность (для I/O).