Что меняет сборка Python без GIL (free-threaded)?
- Уберут ли GIL из Python?
- Что такое PEP 703?
Отдельная сборка CPython (python3.13t) без GIL: потоки выполняют Python-код по-настоящему параллельно на разных ядрах. В 3.13 — экспериментальная, в 3.14 — официально поддерживаемая, но не по умолчанию. Цена: медленнее однопоточный код, C-расширения должны объявить совместимость.
- Подсчёт ссылок стал смещённым и атомарным, аллокатор — mimalloc
- Расширение без поддержки при импорте снова включает GIL
- Гонки в пользовательском коде никуда не делись — блокировки нужны
А ещё Для вычислений в потоках выигрыш почти линейный по ядрам
Подробно
Зачем. GIL не даёт потокам выполнять Python-код параллельно, поэтому вычисления распараллеливали процессами — с ценой pickle и памяти. Особенно мешало это в ML и научных расчётах.
Как устроено без GIL:
- смещённый подсчёт ссылок — поток-владелец объекта меняет счётчик без атомарных операций, остальные — атомарно;
- бессмертные объекты (None, малые числа) не считают ссылки вовсе;
- встроенные коллекции защищены мелкими блокировками на объект;
- аллокатор mimalloc, потокобезопасный.
Цена: однопоточный код медленнее (в 3.13 — до 40%, в 3.14 — около 5–10%), памяти больше. C-расширения должны быть пересобраны и помечены как безопасные; иначе интерпретатор при их импорте возвращает GIL.
Статус: 3.13 — экспериментальная сборка (PEP 703); 3.14 — признана поддерживаемой (PEP 779), но стандартная сборка по-прежнему с GIL. Решение о переходе по умолчанию — позже.
Для разработчика: код, полагавшийся на «атомарность благодаря GIL», может сломаться; блокировки и очереди — обязательны.
Что хотят услышать
- Что даёт отсутствие GIL.
- Технические изменения: подсчёт ссылок, блокировки коллекций.
- Цена и статус по версиям.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗В Python 3.13 GIL удалён во всех сборках по умолчанию, поэтому блокировки в многопоточном коде больше не нужны
- ✓Отдельная сборка: потоки выполняют Python-код параллельно, но однопоточный код медленнее
- ✗Free-threaded сборка ускоряет однопоточный код
- ✗Без GIL C-расширения работают без доработок
Разбор темы
- Потоки, процессы и GIL
Что такое GIL и что он не защищает, когда выбирать потоки, процессы или asyncio, concurrent.futures, ограничения multiprocessing, сборка без GIL.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.