Опубликован план избавления CPython от глобальной блокировки интерпретатора
Руководящий совет проекта Python объявил о намерении утвердить предложение по расширению языка Python PEP-0703, в котором определяется добавление режима сборки CPython без глобальной блокировки интерпретатора (GIL, Global Interpreter Lock). В качестве вероятного срока реализации PEP-0703 упоминается выпуск Python 3.13, намеченный на осень следующего года.
Во внедряемом PEP-0703 определено оставление по умолчанию GIL, но добавление сборочной опции »--without-gil» для его отключения. Новый режим позволит решить проблему с распараллеливанием операций на многоядерных системах, вызванную тем, что глобальная блокировка не допускает параллельное обращение к разделяемым объектам из разных потоков. В долгосрочной перспективе (через 5 лет) интерпретатор планируется перевести по умолчанию на сборку только в режиме без глобальной блокировки, одновременно прекратив поддержку сборки с GIL.
На первом этапе отключение GIL по умолчанию нецелесообразно в связи с накладными расходами, связанными с изменениями в сборщике мусора, системе управления памятью и примитивах для организации блокировок. Например, из-за использования подсчёта ссылок для изоляции потоков наблюдается снижение производительности однопоточных сценариев (в тестовом наборе pyperformance на 10%). При этом отключение GIL может потребоваться в научных вычислениях, для которых отсутствие распараллеливания является более серьёзной проблемой, чем линейная скорость выполнения кода.
Отмечается, что работа по уходу от GIL будет проведена с большой осторожностью, чтобы не повторить провала, случившегося при продвижении Python 3 — сборка без GIL должна будет обязательно сохранить обратную совместимость со старыми версиями Python, а все изменения в стороннем коде, необходимые для работы в сборках без GIL, должны работать и в сборках с GIL. Изменять нумерацию выпусков на Python 4 для сборок без GIL не планируется, так как в них будет сохранена совместимость на уровне ABI.
До полного перехода на сборки без GIL планируется добиться всесторонней поддержки данных сборок со стороны сообщества, а также предоставить дополнительные C API и Python API для обеспечения безопасной многопоточности в существующем коде. Уход от GIL будет проведён в три этапа: добавление в CPython в 3.13 (возможно в 3.14) экспериментальной опции для сборки без GIL, поддерживаемой основной командой разработчиков; перевод опции сборки без GIL в разряд пригодных для рабочих внедрений и одобрение поставки сборок без GIL по желанию дистрибутивов; переход на сборку без GIL по умолчанию и удаление кода для поддержки GIL. Прогнозируется, что переход на третью стадию может произойти как минимум через 5 лет.
Источник: http://www.opennet.ru/opennews/art.shtml? num=59518
© OpenNet