Диспетчеризация в Python: Создание необязательного GIL
Руководящий совет сделал огромное объявление, касающееся будущего Python. А именно, они решили сделать глобальную блокировку интерпретатора (GIL) необязательной в CPython и в перспективе вообще отказаться от GIL.
Это огромное решение, которое коренным образом изменит Python.
Поэтому в этой статье я расскажу о том, что представляет собой GIL, о его преимуществах и недостатках, а также о том, что его ждет в будущем.
ГИЛ
Позвольте мне просмотреть Global Interpreter Lock по одному слову в обратном порядке, начиная с замок а затем переводчик и, наконец, глобальный.
Блокировка - это механизм, позволяющий одновременно работать только одному потоку. Поэтому, когда поток получает блокировку, он получает эксклюзивный доступ к интерпретатору Python.
An Интерпретатор - это программа для выполнения кода Python.
Слово "глобальный" здесь относится к области действия блокировки интерпретатора. Поскольку блокировка интерпретатора является глобальной, она гарантирует, что только один поток одновременно выполняет код Python в рамках одного процесса.
Итак, GIL - это механизм, предотвращающий одновременную работу нескольких потоков через интерпретатор. Но зачем вам это нужно?
Преимущества
Основное преимущество GIL заключается в том, что он упрощает работу. Проще управлять памятью, проще управлять потоками, проще создавать модули.
Без GIL можно быстро столкнуться с проблемами при работе с многопоточностью. Если вы не установите соответствующие локальные блокировки для каждого потока, то это может привести к аварийному завершению работы Python или повреждению другой памяти на компьютере.
А если вы не используете многопоточность, то GIL будет очень полезен, поскольку он обеспечивает бесперебойную работу.
Таким образом, GIL обеспечивает простоту и безопасность.
Тогда почему бы вам этого не хотеть?
Недостатки
Компромисс здесь заключается в соотношении удобства и скорости.
Предотвращая многопоточность, GIL делает CPython медленнее и менее производительным, чем некоторые другие языки (например, C++, Go и Rust).
Особенно в связи с бурным развитием искусственного интеллекта в последние несколько месяцев GIL становится все большей проблемой для быстрого и эффективного выполнения программ.
Будущее ГИЛ
Итак, теперь, когда Руководящий совет объявил о принятии Python Enhancement Proposal (PEP) 703, автор Сэм ГроссМы вступаем в неизведанные воды.
Бесчисленное количество расширений было написано с учетом GIL. Все стандарты, установленные в CPython, зависят от GIL. Все, кто строит на CPython, ставят GIL в центр своих программ (намеренно или нет).
Таким образом, Руководящий совет на начальном этапе делает GIL необязательным, но в долгосрочной перспективе планирует полностью отказаться от него.
Как говорится в сообщении, "мы не хотим создавать постоянный раскол между сборками (и модулями расширения) with-GIL и no-GIL".
Это совершенно изменит Python, и, что самое интересное, так, как никто еще не знает. Бретт Кэннон, в опросе, адресованном основной команде разработчиковпишет, что "создание свободно-поточного Python... имеет много неизвестных. Мы не знаем, сколько кода неявно опирается на GIL, или небезопасно для потоков тонким способом, который маскируется GIL".
ИГИЛ исчезает - что он унесет с собой?
И, что еще более важно, как будет выглядеть новый CPython?