ℹ️ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | PASS | download_stamp > now() - 6 MONTH | 0.1 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://pythonz.net/articles/402/ |
| Last Crawled | 2026-04-15 13:55:20 (2 days ago) |
| First Indexed | 2021-10-27 06:44:46 (4 years ago) |
| HTTP Status Code | 200 |
| Meta Title | Python 3.9 без GIL. Что дальше? — Про Python |
| Meta Description | Об очередной попытке избавиться от глобальной блокировки интерпретатора. |
| Meta Canonical | null |
| Boilerpipe Text | Об очередной попытке избавиться от глобальной блокировки интерпретатора.
Если вы ещё не знакомы с ГБИ (GIL) — глобальной блокировкой интерпретатора — полезно будет посмотреть старое, но актуальное видео «
Познавая ГБИ (GIL) Питона
».
В
дайджесте 03.10.2021 — 10.10.2021
внимательные читатели могли заметить упоминание темы «
Python multithreading without the GIL
» в разделе «Разработка языка». О чём это?
7 октября Сэм Гросс выступил с предложением обсудить вариант подхода к устранению GIL. Не только выступил, но и опубликовал
детальное описание подхода
. И не только опубликовал, но и поделился ссылкой на
репозиторий
, где он применил подход к
Python 3.9
.
Идея избавиться от GIL далеко не нова. Многие об этом говорили и говорят, немногие пытаются, хоть что-то получается у единиц: читайте «
Чемпион подустал
».
Несомненно стоит отметить основательность, с которой Сэм подошёл к задаче. Судя по комментариям в упомянутом обсуждении, многих разработчиков ядра предложенные подходы заинтересовали.
На днях в ходе спринта разработчиков CPython прошла встреча с Сэмом, о которой пишет
Лукаш Ланга
в своей статье «
Notes From the Meeting On Python GIL Removal Between Python Core and Sam Gross
».
Кратко об изменениях:
замена текущего варианта подсчёта ссылок «пристрастным», позволяющим
нитям
по-разному обходиться с объектом, в зависимости от того был он порождён в этой нити или в другой;
введение понятия «бессмертных» объектов (например, для
None
, булевых значений, мелких целых,
интернированных
строк), для которых не требуется подсчёт ссылок;
использование механизма отложенного подсчёта ссылок для глобальных, но «смертных» объектов, типа модулей, функций, объектов кода. Чтобы занесение их на стек не изменяло счётчик, а деаллоцировались они только при сборке мусора;
замена аллокатора
pymalloc
на
mimalloc
, обеспечивающий безопасную работу с нитями и лёгковесные «кучи»;
замена стековой виртуальной машины регистровой для ускорения вызовов функций.
Получившаяся версия 3.9 без ГБИ работает на 10% быстрее оригинала. Если же применить все упомянутые изменения, то получается прирост в 19% относительно немодифицированного 3.9.
В готовящийся Python 3.11 уже внесены правки, благодаря которым он сейчас на 16% быстрее (при работе в одной нити), чем реализация Сэма.
Что ясно уже сейчас:
Невозможно определить, сколько составит конкретно ваш выигрыш при использовании реализации без GIL без замеров на реальном коде.
Предлагаемые изменения хорошо показывают себя вместе. По-отдельности могут снижать быстродействие.
Авторам расширений на Си, если они захотят получить выигрыш, нужно будет адаптировать расширения. Предполагается, что потребуется продолжительный период адаптации, в котором блокировку можно будет отключать/включать по требованию.
Проект с
подинтерпретаторами
может потерять свою актуальность.
Не стоит ожидать, что
3.11
выйдет уже без ГБИ. Но, быть может,
mimalloc
использовать получится.
Изменения масштабные, задача сложная. Путь обещает быть неблизким, если по нему пойдут. |
| Markdown | [](https://pythonz.net/ "На главную страницу")
- [Статьи](https://pythonz.net/articles/)
- [Справочник](https://pythonz.net/references/)
- [Видео](https://pythonz.net/videos/)
- [Книги](https://pythonz.net/books/)
- [Работа](https://pythonz.net/vacancies/)
- [События](https://pythonz.net/events/)
- [Ещё…](https://pythonz.net/articles/402/)
[Путеводитель](https://pythonz.net/categories/) [Места](https://pythonz.net/places/) [Сообщества](https://pythonz.net/communities/) [Версии Python](https://pythonz.net/versions/) [PEP](https://pythonz.net/peps/) [Персоны](https://pythonz.net/persons/) [Приложения](https://pythonz.net/apps/)
- [Вход](https://pythonz.net/login/)
1. [Про Python](https://pythonz.net/)
2. [Статьи](https://pythonz.net/articles/)
3. Python 3.9 без GIL. Что дальше?
[27 окт. 21 12:46](https://pythonz.net/users/1/ "Добавил: Игорь Стариков") [27 окт. 21 15:10](https://pythonz.net/users/1/ "Редактировал: Игорь Стариков")
# Python 3.9 без GIL. Что дальше?
Об очередной попытке избавиться от глобальной блокировки интерпретатора.
На заметку
Если вы ещё не знакомы с ГБИ (GIL) — глобальной блокировкой интерпретатора — полезно будет посмотреть старое, но актуальное видео «[Познавая ГБИ (GIL) Питона](https://pythonz.net/videos/67/)».
В [дайджесте 03.10.2021 — 10.10.2021](https://pythonz.net/articles/398/) внимательные читатели могли заметить упоминание темы «[Python multithreading without the GIL](https://mail.python.org/archives/list/python-dev@python.org/thread/ABR2L6BENNA6UPSPKV474HCS4LWT26GY/)» в разделе «Разработка языка». О чём это?
7 октября Сэм Гросс выступил с предложением обсудить вариант подхода к устранению GIL. Не только выступил, но и опубликовал [детальное описание подхода](https://docs.google.com/document/d/18CXhDb1ygxg-YXNBJNzfzZsDFosB5e6BfnXLlejd9l0/edit). И не только опубликовал, но и поделился ссылкой на [репозиторий](https://github.com/colesbury/nogil/), где он применил подход к [Python 3.9](https://pythonz.net/versions/named/3.9/).
На заметку
Идея избавиться от GIL далеко не нова. Многие об этом говорили и говорят, немногие пытаются, хоть что-то получается у единиц: читайте «[Чемпион подустал](https://pythonz.net/articles/161/)».
Несомненно стоит отметить основательность, с которой Сэм подошёл к задаче. Судя по комментариям в упомянутом обсуждении, многих разработчиков ядра предложенные подходы заинтересовали.
На днях в ходе спринта разработчиков CPython прошла встреча с Сэмом, о которой пишет [Лукаш Ланга](https://pythonz.net/persons/203/) в своей статье «[Notes From the Meeting On Python GIL Removal Between Python Core and Sam Gross](https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0/)».
Кратко об изменениях:
- замена текущего варианта подсчёта ссылок «пристрастным», позволяющим [нитям](https://pythonz.net/videos/153/) по-разному обходиться с объектом, в зависимости от того был он порождён в этой нити или в другой;
- введение понятия «бессмертных» объектов (например, для `None`, булевых значений, мелких целых, [интернированных](https://pythonz.net/videos/152/) строк), для которых не требуется подсчёт ссылок;
- использование механизма отложенного подсчёта ссылок для глобальных, но «смертных» объектов, типа модулей, функций, объектов кода. Чтобы занесение их на стек не изменяло счётчик, а деаллоцировались они только при сборке мусора;
- замена аллокатора `pymalloc` на `mimalloc`, обеспечивающий безопасную работу с нитями и лёгковесные «кучи»;
- замена стековой виртуальной машины регистровой для ускорения вызовов функций.
Получившаяся версия 3.9 без ГБИ работает на 10% быстрее оригинала. Если же применить все упомянутые изменения, то получается прирост в 19% относительно немодифицированного 3.9.
На заметку
В готовящийся Python 3.11 уже внесены правки, благодаря которым он сейчас на 16% быстрее (при работе в одной нити), чем реализация Сэма.
Что ясно уже сейчас:
- Невозможно определить, сколько составит конкретно ваш выигрыш при использовании реализации без GIL без замеров на реальном коде.
- Предлагаемые изменения хорошо показывают себя вместе. По-отдельности могут снижать быстродействие.
- Авторам расширений на Си, если они захотят получить выигрыш, нужно будет адаптировать расширения. Предполагается, что потребуется продолжительный период адаптации, в котором блокировку можно будет отключать/включать по требованию.
- Проект с [подинтерпретаторами](https://pythonz.net/videos/125/) может потерять свою актуальность.
- Не стоит ожидать, что [3\.11](https://pythonz.net/versions/named/3.11/) выйдет уже без ГБИ. Но, быть может, `mimalloc` использовать получится.
Изменения масштабные, задача сложная. Путь обещает быть неблизким, если по нему пойдут.
[0](https://pythonz.net/login/ "Одобряю!")
- [ВКонтакте 0](https://pythonz.net/articles/402/#comments_vk)
[](https://pythonz.net/users/1/)
[Игорь Стариков](https://pythonz.net/users/1/)
***
#### Категории
Область
- [оптимизация](https://pythonz.net/articles/tags/108/ "О методах и средства оптимизации кода и различных параметров исполнения компьютерных программ.")
- [интерпретация](https://pythonz.net/articles/tags/79/ "Материалы, связанные с интерпретаций кода компьютерных программ, а также с самими интерпретаторами.")
Интерпретатор
- [CPython](https://pythonz.net/articles/tags/23/ "Материалы, связанные с CPython — эталонной реализацией языка программирования Python, написанной на C, являющейся интерпретатором байт-кода.")
Аспект языка
- [конкурентность](https://pythonz.net/articles/tags/69/)
- [ГБИ (GIL)](https://pythonz.net/articles/tags/140/)
- [управление памятью](https://pythonz.net/articles/tags/81/)
- [сборка мусора](https://pythonz.net/articles/tags/55/)
- [нити](https://pythonz.net/articles/tags/127/)
***
На заметку
Зарегистрированные пользователи могут добавлять Видео.
- [Что такое Python](https://pythonz.net/promo/)
- [О проекте](https://pythonz.net/about/)
- [Карта сайта](https://pythonz.net/sitemap/)
- [Поиск по сайту](https://pythonz.net/search/site/)
- [Путеводитель](https://pythonz.net/categories/)
- [Статьи](https://pythonz.net/articles/)
- [Справочник](https://pythonz.net/references/)
- [Видео](https://pythonz.net/videos/)
- [Книги](https://pythonz.net/books/)
- [Работа](https://pythonz.net/vacancies/)
- [События](https://pythonz.net/events/)
- [Места](https://pythonz.net/places/)
- [Сообщества](https://pythonz.net/communities/)
- [Версии Python](https://pythonz.net/versions/)
- [PEP](https://pythonz.net/peps/)
- [Персоны](https://pythonz.net/persons/)
- [Приложения](https://pythonz.net/apps/)
 |
| Readable Markdown | Об очередной попытке избавиться от глобальной блокировки интерпретатора.
Если вы ещё не знакомы с ГБИ (GIL) — глобальной блокировкой интерпретатора — полезно будет посмотреть старое, но актуальное видео «[Познавая ГБИ (GIL) Питона](https://pythonz.net/videos/67/)».
В [дайджесте 03.10.2021 — 10.10.2021](https://pythonz.net/articles/398/) внимательные читатели могли заметить упоминание темы «[Python multithreading without the GIL](https://mail.python.org/archives/list/python-dev@python.org/thread/ABR2L6BENNA6UPSPKV474HCS4LWT26GY/)» в разделе «Разработка языка». О чём это?
7 октября Сэм Гросс выступил с предложением обсудить вариант подхода к устранению GIL. Не только выступил, но и опубликовал [детальное описание подхода](https://docs.google.com/document/d/18CXhDb1ygxg-YXNBJNzfzZsDFosB5e6BfnXLlejd9l0/edit). И не только опубликовал, но и поделился ссылкой на [репозиторий](https://github.com/colesbury/nogil/), где он применил подход к [Python 3.9](https://pythonz.net/versions/named/3.9/).
Идея избавиться от GIL далеко не нова. Многие об этом говорили и говорят, немногие пытаются, хоть что-то получается у единиц: читайте «[Чемпион подустал](https://pythonz.net/articles/161/)».
Несомненно стоит отметить основательность, с которой Сэм подошёл к задаче. Судя по комментариям в упомянутом обсуждении, многих разработчиков ядра предложенные подходы заинтересовали.
На днях в ходе спринта разработчиков CPython прошла встреча с Сэмом, о которой пишет [Лукаш Ланга](https://pythonz.net/persons/203/) в своей статье «[Notes From the Meeting On Python GIL Removal Between Python Core and Sam Gross](https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0/)».
Кратко об изменениях:
- замена текущего варианта подсчёта ссылок «пристрастным», позволяющим [нитям](https://pythonz.net/videos/153/) по-разному обходиться с объектом, в зависимости от того был он порождён в этой нити или в другой;
- введение понятия «бессмертных» объектов (например, для `None`, булевых значений, мелких целых, [интернированных](https://pythonz.net/videos/152/) строк), для которых не требуется подсчёт ссылок;
- использование механизма отложенного подсчёта ссылок для глобальных, но «смертных» объектов, типа модулей, функций, объектов кода. Чтобы занесение их на стек не изменяло счётчик, а деаллоцировались они только при сборке мусора;
- замена аллокатора `pymalloc` на `mimalloc`, обеспечивающий безопасную работу с нитями и лёгковесные «кучи»;
- замена стековой виртуальной машины регистровой для ускорения вызовов функций.
Получившаяся версия 3.9 без ГБИ работает на 10% быстрее оригинала. Если же применить все упомянутые изменения, то получается прирост в 19% относительно немодифицированного 3.9.
В готовящийся Python 3.11 уже внесены правки, благодаря которым он сейчас на 16% быстрее (при работе в одной нити), чем реализация Сэма.
Что ясно уже сейчас:
- Невозможно определить, сколько составит конкретно ваш выигрыш при использовании реализации без GIL без замеров на реальном коде.
- Предлагаемые изменения хорошо показывают себя вместе. По-отдельности могут снижать быстродействие.
- Авторам расширений на Си, если они захотят получить выигрыш, нужно будет адаптировать расширения. Предполагается, что потребуется продолжительный период адаптации, в котором блокировку можно будет отключать/включать по требованию.
- Проект с [подинтерпретаторами](https://pythonz.net/videos/125/) может потерять свою актуальность.
- Не стоит ожидать, что [3\.11](https://pythonz.net/versions/named/3.11/) выйдет уже без ГБИ. Но, быть может, `mimalloc` использовать получится.
Изменения масштабные, задача сложная. Путь обещает быть неблизким, если по нему пойдут. |
| Shard | 112 (laksa) |
| Root Hash | 17356767571072496112 |
| Unparsed URL | net,pythonz!/articles/402/ s443 |