GIL предотвращает одновременное выполнение нескольких нативных потоков Python (Python threads) в одном процессе, когда эти потоки пытаются получить доступ к объектам Python. Это решает две основные проблемы:
- Управление памятью: Защищает от гонки данных (data races) при модификации общей структуры данных в памяти, например, счетчиков ссылок (reference counts), которые используются для сборки мусора. Без GIL требовались бы более тонкие механизмы блокировки для каждой общей структуры данных Python, что усложнило бы интерпретатор.
- Потокобезопасность C API: Упрощает интеграцию с нативными библиотеками через C API. Разработчикам расширений на C не нужно беспокоиться о потокобезопасности при работе с объектами Python, поскольку их монопольный доступ к этим объектам гарантируется GIL.
Хотя GIL и ограничивает параллельность при работе с CPU-bound задачами, он упрощает реализацию интерпретатора и интеграцию с C-библиотеками, что исторически было важным для развития Python. Для задач, требующих истинного параллелизма, используются многопроцессность (multiprocessing) или альтернативные интерпретаторы Python.