Карточка Middle GIL, потоки и процессы обновлено
Зачем в CPython GIL
Вопрос
Почему в CPython появился GIL?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Управление памятью через подсчёт ссылок: счётчик меняется при каждой операции с объектом. GIL позволяет делать это без блокировки на каждом объекте, упрощает интерпретатор и C-расширения и делает однопоточный код быстрым.
Ответ
Управление памятью через подсчёт ссылок: счётчик меняется при каждой операции с объектом. GIL позволяет делать это без блокировки на каждом объекте, упрощает интерпретатор и C-расширения и делает однопоточный код быстрым.
Разбор
Цена: нет параллельного выполнения Python-байткода в потоках. Free-threaded сборка решает это через атомарные и «смещённые» счётчики ссылок и другие механизмы, с небольшими потерями в однопоточной скорости.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «GIL, потоки и процессы»
- Выбор между потоками, процессами и asyncio
- Найти риск взаимной блокировки
- Время работы пула с ограничением параллелизма
- Смоделировать потерю обновления
- Потоки для CPU-bound задачи
- Как избежать взаимной блокировки
- fork в многопоточной программе
- Free-threaded CPython в 3.13 и 3.14