ℹ️ 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://speakerdeck.com/moscowdjango/gil-v-python-zachiem-on-nuzhien-i-kak-s-etim-zhit |
| Last Crawled | 2026-04-16 19:49:34 (3 days ago) |
| First Indexed | 2018-10-06 18:44:01 (7 years ago) |
| HTTP Status Code | 200 |
| Meta Title | GIL в Python: зачем он нужен и как с этим жить - Speaker Deck |
| Meta Description | Григорий Петров (Digital October) В своем докладе Григорий проведет краткий экскурс в историю потоков и расскажет, зачем был создан GIL. Будут рассмо… |
| Meta Canonical | null |
| Boilerpipe Text | Transcript
Но программисты снова не смогли В процессе написания больших и
сложных программ возник ряд вопросов: • Если программа читает файл, то она ждет, пока операционная система вернет управление. • Асинхронные функции и алгоритмы слишком сложны и не всегда доступны. • Запуск дополнительных процессов слишком долгий. * * Для Windows :)
Поток • Это процесс без виртуализации памяти :) • Засыпает
и просыпается так же, как раньше засыпали и просыпались процессы. • Читает и пишет ту же виртуальную память, что и остальные потоки одного процесса. • Быстро стартует. • При создании процесса создается первый, он же “основной” поток.
И что тогда делает Lock в GIL? Если потоки и
без GIL не выполняются одновременно, то как GIL может, цитируя документацию, “prevent multiple native threads from executing Python bytecodes at once (одновременно)”? А никак. Он не это делает.
Как он это делает? Тривиально. Программа не может предотвратить засыпание
своих потоков, но она может контролировать, когда они проснутся. Python принудительно погружает все потоки, кроме текущего, в сон. Они спят и ждут светлого будущего GIL. А когда Python понимает, что текущий поток уже слишком долго работает в гордом одиночестве, - он усыпляет его в ожидаемом месте и будит один из своих спящих потоков.
Что такое тик? Это тик: a = 1
Версия 3.2 • Потоки спят и ждут GIL не вечно,
а 5 мс. • Проснувшийся по таймауту поток обижается, выставляет флаг “хочу GIL” и снова засыпает. • Текущий поток в конце каждого тика проверяет наличие флага “хочу GIL” и, если таковой есть, будит один из ожидающих GIL потоков и засыпает. • sys.getswitchinterval, sys.setswitchinterval
Итак, что же делает GIL? • В нормальных условиях потоки
засыпают и просыпаются по велению операционной системы - часто и неожиданно. • GIL запрещает всем потокам Python, кроме текущего, просыпаться неожиданно. • Текущий поток засыпает и просыпается по велению операционной системы. Но когда Python решает, что пора переключаться, - текущий поток засыпает сам.
И где же здесь проблема? ?
Механизм поднятия GIL GIL защищает от того, что поток A
неожиданно уснет, поток B неожиданно проснется и поменяет байтики внутри интерпретатора, которые поток А ну никак не ожидает видеть измененными. Но если в потоке вызвана функция операционной системы для приема данных по сети - это не код python, и он не может поменять байтики в интерпретаторе.
Логическая защита кода threading.Lock threading.Semaphore threading.Event threading.Queue
А если много ядер? • Если у вас много ядер
и вы хотите максимизировать скорость выполнения именно Python кода — значит, у вас очень редкий случай :) • NumPy и SciPy поднимают GIL на долгих операциях (работа с матрицами). • Используйте библиотеки для расчетов • Используйте процессы. |
| Markdown | [Upgrade to Pro — share decks privately, control downloads, hide ads and more …](https://speakerdeck.com/pro?utm_campaign=upgrade_to_pro&utm_medium=web&utm_source=talk_show)
[ Speaker Deck](https://speakerdeck.com/)
- [Features](https://speakerdeck.com/features)
- [Speaker Deck PRO](https://speakerdeck.com/pro?utm_campaign=speakerdeck_pro&utm_medium=web&utm_source=nav_unauthenticated)
- [Sign in](https://speakerdeck.com/signin)
- [Sign up for free](https://speakerdeck.com/signup)
[](https://speakerdeck.com/)
#### GIL в Python: зачем он нужен и как с этим жить
[ Moscow Python Meetup](https://speakerdeck.com/moscowdjango) [PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
September 12, 2013
[Programming](https://speakerdeck.com/c/programming)
5\.6k
[2](https://speakerdeck.com/signin?return_to=%2Fmoscowdjango%2Fgil-v-python-zachiem-on-nuzhien-i-kak-s-etim-zhit "Star GIL в Python: зачем он нужен и как с этим жить")
Share
# GIL в Python: зачем он нужен и как с этим жить
Григорий Петров (Digital October)
В своем докладе Григорий проведет краткий экскурс в историю потоков и расскажет, зачем был создан GIL. Будут рассмотрены практические вопросы многопоточности в Python и способы работы с GIL.

## [Moscow Python Meetup](https://speakerdeck.com/moscowdjango) [PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
September 12, 2013
## More Decks by Moscow Python Meetup
[See All by Moscow Python Meetup](https://speakerdeck.com/moscowdjango)
[Moscow Python Meetup №109. Георгий Дьячков (Альфа банк, Главный разработчик). Векторные базы в агентной архитектуре и как изменятся вопросы на собеседованиях в 2026](https://speakerdeck.com/moscowdjango/moscow-python-meetup-109-gieorghii-diachkov-alfa-bank-glavnyi-razrabotchik-viektornyie-bazy-v-aghientnoi-arkhitiekturie "Moscow Python Meetup №109. Георгий Дьячков (Альфа банк, Главный разработчик). Векторные базы в агентной архитектуре и как изменятся вопросы на собеседованиях в 2026 ")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
21
[Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python](https://speakerdeck.com/moscowdjango/moscow-python-meetup-109-ievghienii-blinov-the-mutating-company-blizhaishieie-budushchieie-mutatsionnogho-tiestirovaniia-na-python "Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python ")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
21
[Moscow Python Meetup №108. Воркшоп "Построение AI-агента: Говори с данными на языке бизнеса"](https://speakerdeck.com/moscowdjango/moscow-python-meetup-108-vorkshop-postroieniie-ai-aghienta-govori-s-dannymi-na-iazykie-bizniesa "Moscow Python Meetup №108. Воркшоп \"Построение AI-агента: Говори с данными на языке бизнеса\"")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
60
[Moscow Python Meetup №108. Gather. Inspire. Deliver.](https://speakerdeck.com/moscowdjango/moscow-python-meetup-108-gather-inspire-deliver "Moscow Python Meetup №108. Gather. Inspire. Deliver.")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
48
[Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API](https://speakerdeck.com/moscowdjango/moscow-python-meetup-107-biesshovnyie-rielizy-ghlazami-razrabotchika-obnovliaiem-kod-oblaka-biez-api "Moscow Python Meetup №107. Бесшовные релизы глазами разработчика: обновляем код Облака без API")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
50
[Moscow Python Meetup №107. Django Blue-Green Migrations](https://speakerdeck.com/moscowdjango/moscow-python-meetup-107-django-blue-green-migrations "Moscow Python Meetup №107. Django Blue-Green Migrations")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
38
[Moscow Python Meetup №107. Суперсжатые полнотекстовые индексы](https://speakerdeck.com/moscowdjango/moscow-python-meetup-107-supierszhatyie-polnotiekstovyie-indieksy "Moscow Python Meetup №107. Суперсжатые полнотекстовые индексы")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
61
[Moscow Python Meetup №106. Евгений Блинов (The Mutating Company, Founder). Суперфункции](https://speakerdeck.com/moscowdjango/moscow-python-meetup-106-ievghienii-blinov "Moscow Python Meetup №106. Евгений Блинов (The Mutating Company, Founder). Суперфункции")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
110
[Moscow Python Meetup №106. Валерий Карпузов (SmartFX, Team Lead). Пиши, сокращай — Code Golf на Python](https://speakerdeck.com/moscowdjango/moscow-python-meetup-106-valierii-karpuzov-smartfx-team-lead "Moscow Python Meetup №106. Валерий Карпузов (SmartFX, Team Lead). Пиши, сокращай — Code Golf на Python ")
[ moscowdjango](https://speakerdeck.com/moscowdjango)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
130
## Other Decks in Programming
[See All in Programming](https://speakerdeck.com/c/programming)
[我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 \#phperkaigi / PHPerKaigi 2026](https://speakerdeck.com/shogogg/phperkaigi-2026 "我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026")
[ shogogg](https://speakerdeck.com/shogogg)
2
830
[Go\_College\_最終発表資料\_\_外部公開用\_.pdf](https://speakerdeck.com/xe_pc23/go-college-zui-zhong-fa-biao-zi-liao-wai-bu-gong-kai-yong "Go_College_最終発表資料__外部公開用_.pdf")
[ xe\_pc23](https://speakerdeck.com/xe_pc23)
0
130
[Linux Kernelの1文字のミスで 権限昇格ができた話](https://speakerdeck.com/rqda/linux-kernelno1wen-zi-nomisude-quan-xian-sheng-ge-gadekitahua "Linux Kernelの1文字のミスで 権限昇格ができた話")
[ rqda](https://speakerdeck.com/rqda)
0
2\.3k
[GNU Makeの使い方 / How to use GNU Make](https://speakerdeck.com/kaityo256/how-to-use-gnu-make "GNU Makeの使い方 / How to use GNU Make")
[ kaityo256](https://speakerdeck.com/kaityo256)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
16
5\.6k
[Redox OS でのネームスペース管理と chroot の実現](https://speakerdeck.com/isanethen/redox-os-denonemusupesuguan-li-to-chroot-noshi-xian "Redox OS でのネームスペース管理と chroot の実現")
[ isanethen](https://speakerdeck.com/isanethen)
0
550
[実践CRDT](https://speakerdeck.com/tamadeveloper/shi-jian-crdt "実践CRDT")
[ tamadeveloper](https://speakerdeck.com/tamadeveloper)
0
370
[\[PHPerKaigi 2026\]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見](https://speakerdeck.com/ikezoemakoto/phperkaigi-2026-phperkaigi2025noqi-hua-codegolfgazui-gao-sugiteshe-nei-denei-zhi-siteban-nian-yun-ying-sitede-tanei-zhi-toyun-ying-nozhi-jian "[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見")
[ ikezoemakoto](https://speakerdeck.com/ikezoemakoto)
0
340
[PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい](https://speakerdeck.com/higaki_program/phpde-tlsnopurotokoruwoshi-zhuang-sitemiruwomou-du-siyaberitai "PHPで TLSのプロトコルを実装してみるをもう一度しゃべりたい")
[ higaki\_program](https://speakerdeck.com/higaki_program)
0
180
[Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform](https://speakerdeck.com/renaudmathieu/offline-should-be-the-norm-building-local-first-apps-with-crdts-and-kotlin-multiplatform "Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform")
[ renaudmathieu](https://speakerdeck.com/renaudmathieu)
0
140
[メッセージングを利用して時間的結合を分離しよう \#phperkaigi](https://speakerdeck.com/kajitack/messaging-temporal-coupling "メッセージングを利用して時間的結合を分離しよう #phperkaigi")
[ kajitack](https://speakerdeck.com/kajitack)
3
560
[車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体](https://speakerdeck.com/h1r0/che-lun-nozai-fa-ming-wosiyou-php-deshi-zhuang-sitexue-bu-web-sabanoshi-zu-mito-http-nozheng-ti "車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体")
[ h1r0](https://speakerdeck.com/h1r0)
3
510
[AI活用のコスパを最大化する方法](https://speakerdeck.com/ochtum/aihuo-yong-nokosupawozui-da-hua-surufang-fa-1e025d1d-c424-4303-872f-3b10985a562a "AI活用のコスパを最大化する方法")
[ ochtum](https://speakerdeck.com/ochtum)
0
380
## Featured
[See All Featured](https://speakerdeck.com/p/featured)
[Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024](https://speakerdeck.com/apolaine/navigating-the-design-leadership-dip-product-design-week-design-leaders-plus-conference-2024 "Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024")
[ apolaine](https://speakerdeck.com/apolaine)
0
260
[HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy](https://speakerdeck.com/inesmontani/hu-berlin-industrial-strength-natural-language-processing-with-spacy-and-prodigy "HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy")
[ inesmontani](https://speakerdeck.com/inesmontani)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
310
[ラッコキーワード サービス紹介資料](https://speakerdeck.com/rakko/introduction "ラッコキーワード サービス紹介資料")
[ rakko](https://speakerdeck.com/rakko)
1
2\.9M
[Building a Modern Day E-commerce SEO Strategy](https://speakerdeck.com/aleyda/building-a-modern-day-e-commerce-seo-strategy "Building a Modern Day
E-commerce SEO Strategy")
[ aleyda](https://speakerdeck.com/aleyda)
45
9k
[Documentation Writing (for coders)](https://speakerdeck.com/carmenintech/documentation-writing-for-coders "Documentation Writing (for coders)")
[ carmenintech](https://speakerdeck.com/carmenintech)
77
5\.3k
[Money Talks: Using Revenue to Get Sh\*t Done](https://speakerdeck.com/nikkihalliwell/money-talks-using-revenue-to-get-sh-star-t-done "Money Talks: Using Revenue to Get Sh*t Done")
[ nikkihalliwell](https://speakerdeck.com/nikkihalliwell)
0
200
[Sam Torres - BigQuery for SEOs](https://speakerdeck.com/techseoconnect/sam-torres-bigquery-for-seos "Sam Torres - BigQuery for SEOs")
[ techseoconnect](https://speakerdeck.com/techseoconnect)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
0
240
[Chasing Engaging Ingredients in Design](https://speakerdeck.com/codingconduct/chasing-engaging-ingredients-in-design "Chasing Engaging Ingredients in Design")
[ codingconduct](https://speakerdeck.com/codingconduct)
0
160
[Being A Developer After 40](https://speakerdeck.com/akosma/being-a-developer-after-40 "Being A Developer After 40")
[ akosma](https://speakerdeck.com/akosma)
91
590k
[Google's AI Overviews - The New Search](https://speakerdeck.com/badams/googles-ai-overviews-the-new-search "Google's AI Overviews - The New Search")
[ badams](https://speakerdeck.com/badams)
0
960
[Applied NLP in the Age of Generative AI](https://speakerdeck.com/inesmontani/applied-nlp-in-the-age-of-generative-ai "Applied NLP in the Age of Generative AI")
[ inesmontani](https://speakerdeck.com/inesmontani)
[PRO](https://speakerdeck.com/pro?utm_campaign=PRO&utm_medium=web&utm_source=user_pro_badge)
4
2\.2k
[Music & Morning Musume](https://speakerdeck.com/bryan/music-morning-musume "Music & Morning Musume")
[ bryan](https://speakerdeck.com/bryan)
47
7\.1k
## Transcript
1. ### [GIL в Python зачем он нужен и как с этим](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_0.jpg "GIL в Python: зачем он нужен и как с этим жить GIL в Python зачем он нужен и как с этим жить")
жить
2. ### [Что сейчас будет? Время 30-40 минут Ведущий Григорий Петров Специализация](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_1.jpg "GIL в Python: зачем он нужен и как с этим жить Что сейчас будет? Время 30-40 минут Ведущий Гри...")
Руководство разработкой Опыт Более 15 лет Вопросы В конце доклада
3. ### [Warning В докладе много упрощений и допущений, особенно это касается](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_2.jpg "GIL в Python: зачем он нужен и как с этим жить Warning В докладе много упрощений и допущений, ...")
многопроцессорных систем. Точность принесена в жертву простоте изложения, чтобы не превратить обзорный доклад с плюшками в сухую и бесполезную лекцию.
4. ### [Упрощение до предела У компьютера есть память и процессор. Все](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_3.jpg "GIL в Python: зачем он нужен и как с этим жить Упрощение до предела У компьютера есть память и...")
что компьютер делает, - это берет байтики из памяти, грустно на них смотрит и меняет на другие байтики в памяти. И все.
5. ### [Первые шаги Первые компьютеры и первые операционные системы были очень](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_4.jpg "GIL в Python: зачем он нужен и как с этим жить Первые шаги Первые компьютеры и первые операцио...")
простые: они выполняли только одну программу за раз. Все программы загружались в общую память и передавали друг другу управление – кооперативная многозадачность.
6. ### [И первые хотелки Пользователи хотели выполнять несколько программ одновременно. И](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_5.jpg "GIL в Python: зачем он нужен и как с этим жить И первые хотелки Пользователи хотели выполнять ...")
программисты создали абстракцию - процесс. С кооперативной многозадачностью. Все программы загружались в общую память и передавали друг другу управление.
7. ### [Но программисты не смогли Программисты не смогли писать программы без](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_6.jpg "GIL в Python: зачем он нужен и как с этим жить Но программисты не смогли Программисты не смогл...")
ошибок - слишком дорого. И когда программа зависала, она не передавала никому управление, и зависали все запущенные программы во главе с операционной системой. … А еще программы портили память. Надо было что-то делать.
8. ### [Вытесняющая многозадачность Раз в 20 миллисекунд процесс засыпает, и просыпается](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_7.jpg "GIL в Python: зачем он нужен и как с этим жить Вытесняющая многозадачность Раз в 20 миллисекун...")
мафия операционная система, которая обозревает спящие процессы и решает, кому из них просыпаться. Зависшие процессы больше не останавливают операционную систему. Правильно написанная программа большую часть времени спит, ожидая чего-нибудь интересного. Ее разбудят.
9. ### [Виртуальная память В CPU была добавлена функция обмана программ. Каждая](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_8.jpg "GIL в Python: зачем он нужен и как с этим жить Виртуальная память В CPU была добавлена функция...")
программа считает, что у нее есть вся память от 0 до бесконечности\*. А при записи и чтении соответствующий кусочек памяти записывается и читается в физическую память. \* Для 32-битных систем бесконечность - от 2 до 3 гигабайт, в зависимости от настроек.
10. ### [Но программисты снова не смогли В процессе написания больших и](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_9.jpg "GIL в Python: зачем он нужен и как с этим жить Но программисты снова не смогли В процессе напи...")
сложных программ возник ряд вопросов: • Если программа читает файл, то она ждет, пока операционная система вернет управление. • Асинхронные функции и алгоритмы слишком сложны и не всегда доступны. • Запуск дополнительных процессов слишком долгий. \* \* Для Windows :)
11. ### [Поток • Это процесс без виртуализации памяти :) • Засыпает](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_10.jpg "GIL в Python: зачем он нужен и как с этим жить Поток ● Это процесс без виртуализации памяти :)...")
и просыпается так же, как раньше засыпали и просыпались процессы. • Читает и пишет ту же виртуальную память, что и остальные потоки одного процесса. • Быстро стартует. • При создании процесса создается первый, он же “основной” поток.
12. ### [Но программисты снова не смогли Вам рассказывали, что проблема многопоточности](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_11.jpg "GIL в Python: зачем он нужен и как с этим жить Но программисты снова не смогли Вам рассказывал...")
\- в одновременном доступе к памяти? Вас обманули. Компьютер ничего не делает “одновременно” - он играет в пошаговую стратегию. \* • Проблема потоков в том, что они засыпают и просыпаются в неожиданные моменты времени. \* Многоядерные играют в несколько непересекающихся пошаговых стратегий.
13. ### [Совсем неожиданные Память Поток 2 Поток 1 Поток работает Поток](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_12.jpg "GIL в Python: зачем он нужен и как с этим жить Совсем неожиданные Память Поток 2 Поток 1 Поток...")
работает Поток работает Поток спит Поток спит Поток спит Общая память потоков Общая память потоков Общая память потоков Указатель не 0? Читаем по адресу Обнулить :) Указатель → адрес Указатель → 0 Указатель → 0
14. ### [И что тогда делает Lock в GIL? Если потоки и](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_13.jpg "GIL в Python: зачем он нужен и как с этим жить И что тогда делает Lock в GIL? Если потоки и бе...")
без GIL не выполняются одновременно, то как GIL может, цитируя документацию, “prevent multiple native threads from executing Python bytecodes at once (одновременно)”?
15. ### [И что тогда делает Lock в GIL? Если потоки и](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_14.jpg "GIL в Python: зачем он нужен и как с этим жить И что тогда делает Lock в GIL? Если потоки и бе...")
без GIL не выполняются одновременно, то как GIL может, цитируя документацию, “prevent multiple native threads from executing Python bytecodes at once (одновременно)”? А никак. Он не это делает.
16. ### [От чего защищает GIL? От того, что второй поток проснется](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_15.jpg "GIL в Python: зачем он нужен и как с этим жить От чего защищает GIL? От того, что второй поток...")
неожиданно для первого и поменяет структуры в памяти интерпретатора. Проснувшийся первый поток будет очень удивлен. Вплоть до падения.
17. ### [Как он это делает? Тривиально. Программа не может предотвратить засыпание](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_16.jpg "GIL в Python: зачем он нужен и как с этим жить Как он это делает? Тривиально. Программа не мож...")
своих потоков, но она может контролировать, когда они проснутся. Python принудительно погружает все потоки, кроме текущего, в сон. Они спят и ждут светлого будущего.
18. ### [Как он это делает? Тривиально. Программа не может предотвратить засыпание](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_17.jpg "GIL в Python: зачем он нужен и как с этим жить Как он это делает? Тривиально. Программа не мож...")
своих потоков, но она может контролировать, когда они проснутся. Python принудительно погружает все потоки, кроме текущего, в сон. Они спят и ждут светлого будущего GIL.
19. ### [Как он это делает? Тривиально. Программа не может предотвратить засыпание](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_18.jpg "GIL в Python: зачем он нужен и как с этим жить Как он это делает? Тривиально. Программа не мож...")
своих потоков, но она может контролировать, когда они проснутся. Python принудительно погружает все потоки, кроме текущего, в сон. Они спят и ждут светлого будущего GIL. А когда Python понимает, что текущий поток уже слишком долго работает в гордом одиночестве, - он усыпляет его в ожидаемом месте и будит один из своих спящих потоков.
20. ### [И как ему это удается? Операционная система усыпляет и будит](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_19.jpg "GIL в Python: зачем он нужен и как с этим жить И как ему это удается? Операционная система усы...")
потоки неожиданно, и ей нет дела до того, что Python хочет свой текущий поток усыпить в ожидаемое время. Что же делать?
21. ### [И как ему это удается? Операционная система усыпляет и будит](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_20.jpg "GIL в Python: зачем он нужен и как с этим жить И как ему это удается? Операционная система усы...")
потоки неожиданно, и ей нет дела до того, что Python хочет свой текущий поток усыпить в ожидаемое время. Что же делать? Нужно интегрироваться в операционную систему и поменять логику, по которой она усыпляет и будит потоки\!
22. ### [И как ему это удается? Операционная система усыпляет и будит](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_21.jpg "GIL в Python: зачем он нужен и как с этим жить И как ему это удается? Операционная система усы...")
потоки неожиданно, и ей нет дела до того, что Python хочет свой текущий поток усыпить в ожидаемое время. Что же делать? Нужно интегрироваться в операционную систему и поменять логику, по которой она усыпляет и будит потоки! Плохая идея.
23. ### [И как ему это удается? Операционная система усыпляет и будит](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_22.jpg "GIL в Python: зачем он нужен и как с этим жить И как ему это удается? Операционная система усы...")
потоки неожиданно, и ей нет дела до того, что Python хочет свой текущий поток усыпить в ожидаемое время. Что же делать? Нужно, чтобы текущий поток уснул сам. В ожидаемое время.
24. ### [Когда можно засыпать? • Нельзя, чтобы другой поток проснулся, когда](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_23.jpg "GIL в Python: зачем он нужен и как с этим жить Когда можно засыпать? ● Нельзя, чтобы другой по...")
мы находимся внутри C-кода интерпретатора. • Автор Python решил, что текущий поток будет засыпать раз в 100 тиков, где тик примерно соответствует одной инструкции интерпретатора. • sys.getcheckinterval, sys.setcheckinterval
25. ### [Что такое тик? Это тик: a = 1](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_24.jpg "GIL в Python: зачем он нужен и как с этим жить Что такое тик? Это тик: a = 1")
26. ### [Что такое тик? Это тик: a = 1 К сожалению,](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_25.jpg "GIL в Python: зачем он нужен и как с этим жить Что такое тик? Это тик: a = 1 К сожалению, это ...")
это тоже тик: a in xrange( 10 \*\* 8 )
27. ### [Что такое тик? Это тик: a = 1 К сожалению,](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_26.jpg "GIL в Python: зачем он нужен и как с этим жить Что такое тик? Это тик: a = 1 К сожалению, это ...")
это тоже тик: a in xrange( 10 \*\* 8 ) 100 таких “тиков” выполняются минуты
28. ### [Версия 3.2 • Потоки спят и ждут GIL не вечно,](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_27.jpg "GIL в Python: зачем он нужен и как с этим жить Версия 3.2 ● Потоки спят и ждут GIL не вечно, а...")
а 5 мс. • Проснувшийся по таймауту поток обижается, выставляет флаг “хочу GIL” и снова засыпает. • Текущий поток в конце каждого тика проверяет наличие флага “хочу GIL” и, если таковой есть, будит один из ожидающих GIL потоков и засыпает. • sys.getswitchinterval, sys.setswitchinterval
29. ### [Итак, что же делает GIL? • В нормальных условиях потоки](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_28.jpg "GIL в Python: зачем он нужен и как с этим жить Итак, что же делает GIL? ● В нормальных условия...")
засыпают и просыпаются по велению операционной системы - часто и неожиданно. • GIL запрещает всем потокам Python, кроме текущего, просыпаться неожиданно. • Текущий поток засыпает и просыпается по велению операционной системы. Но когда Python решает, что пора переключаться, - текущий поток засыпает сам.
30. ### [И где же здесь проблема? ?](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_29.jpg "GIL в Python: зачем он нужен и как с этим жить И где же здесь проблема? ?")
31. ### [И где же здесь проблема? Мы запустили 10 потоков на](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_30.jpg "GIL в Python: зачем он нужен и как с этим жить И где же здесь проблема? Мы запустили 10 потоко...")
скачивание файлов. Они не смогут просыпаться часто в случайный момент времени и будут качать с той же скоростью, как если бы были запущены последовательно?
32. ### [И где же здесь проблема? Мы запустили 10 потоков на](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_31.jpg "GIL в Python: зачем он нужен и как с этим жить И где же здесь проблема? Мы запустили 10 потоко...")
скачивание файлов. Они не смогут просыпаться часто в случайный момент времени и будут качать с той же скоростью, как если бы были запущены последовательно? А вот и нет. В Python все предусмотрено.
33. ### [Механизм поднятия GIL GIL защищает от того, что поток A](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_32.jpg "GIL в Python: зачем он нужен и как с этим жить Механизм поднятия GIL GIL защищает от того, что...")
неожиданно уснет, поток B неожиданно проснется и поменяет байтики внутри интерпретатора, которые поток А ну никак не ожидает видеть измененными. Но если в потоке вызвана функция операционной системы для приема данных по сети - это не код python, и он не может поменять байтики в интерпретаторе.
34. ### [Механизм поднятия GIL Когда Python вызывает функцию операционной системы или](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_33.jpg "GIL в Python: зачем он нужен и как с этим жить Механизм поднятия GIL Когда Python вызывает фун...")
внешней библиотеки, он отключает механизм GIL.
35. ### [Механизм поднятия GIL Когда Python вызывает функцию операционной системы или](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_34.jpg "GIL в Python: зачем он нужен и как с этим жить Механизм поднятия GIL Когда Python вызывает фун...")
внешней библиотеки, он отключает механизм GIL. А после того как функция вернет управление, снова включает его. Это называется “поднять GIL” и “опустить GIL”.
36. ### [Промежуточный вывод Если у нас одноядерный процессор, GIL ничем не](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_35.jpg "GIL в Python: зачем он нужен и как с этим жить Промежуточный вывод Если у нас одноядерный проц...")
мешает нашим потокам и приносит пользу: • Код, не имеющий отношения к интерпретатору, засыпает и просыпается, когда ему надо, и не ждет ничего лишнего. • Python-код засыпает и просыпается аккуратно, чтобы ничего не повредилось.
37. ### [Физическая и логическая защита GIL защищает память от повреждений и](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_36.jpg "GIL в Python: зачем он нужен и как с этим жить Физическая и логическая защита GIL защищает пам...")
делает тики атомарными. Но тики — довольно мелкая единица языка: if a \> 0: a = 10 Здесь от двух тиков и более.
38. ### [Логическая защита кода threading.Lock threading.Semaphore threading.Event threading.Queue](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_37.jpg "GIL в Python: зачем он нужен и как с этим жить Логическая защита кода threading.Lock threading...")
39. ### [А если много ядер? • Если у вас много ядер](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_38.jpg "GIL в Python: зачем он нужен и как с этим жить А если много ядер? ● Если у вас много ядер и вы...")
и вы хотите максимизировать скорость выполнения именно Python кода — значит, у вас очень редкий случай :) • NumPy и SciPy поднимают GIL на долгих операциях (работа с матрицами). • Используйте библиотеки для расчетов • Используйте процессы.
40. ### [Можно кидать помидоры Рассказывал, показывал и махал руками Григорий Петров.](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_39.jpg "GIL в Python: зачем он нужен и как с этим жить Можно кидать помидоры Рассказывал, показывал и ...")
Со мной можно связаться: [\[email protected\]](https://speakerdeck.com/cdn-cgi/l/email-protection) www.facebook.com/grigoryvp Вопросы?

[ SpeakerDeck](https://speakerdeck.com/)
## Top Categories
- [Programming](https://speakerdeck.com/c/programming)
- [Technology](https://speakerdeck.com/c/technology)
- [Storyboards](https://speakerdeck.com/c/storyboards)
- [Featured decks](https://speakerdeck.com/p/featured)
- [Featured speakers](https://speakerdeck.com/s/featured)
## Use Cases
- [Storyboard Artists](https://speakerdeck.com/pro/storyboard-artists)
- [Educators](https://speakerdeck.com/educators)
- [Students](https://speakerdeck.com/student-pricing)
## Resources
- [Help Center](https://help.speakerdeck.com/)
- [Blog](https://blog.speakerdeck.com/)
- [Compare Speaker Deck](https://speakerdeck.com/slideshare-alternative)
- [Advertising](https://speakerdeck.com/advertising)
## Features
- [Private URLs](https://speakerdeck.com/features/privacy-controls)
- [Password Protection](https://speakerdeck.com/features/password-protection)
- [Custom URLS](https://speakerdeck.com/features/custom-urls)
- [Scheduled publishing](https://speakerdeck.com/features/scheduled-publishing)
- [Remove Branding](https://speakerdeck.com/features/remove-branding)
- [Restrict embedding](https://speakerdeck.com/features/restrict-embedding)
- [Notes](https://speakerdeck.com/features/slide-notes)
Copyright © 2026 Speaker Deck, LLC.
All slide content and descriptions are owned by their creators.
- [About](https://speakerdeck.com/about)
- [Terms](https://speakerdeck.com/tos)
- [Privacy](https://speakerdeck.com/privacy)
- [DMCA](https://speakerdeck.com/dmca)
- [Accessibility Statement](https://speakerdeck.com/accessibility)
 |
| Readable Markdown | ## Transcript
1. ### [Но программисты снова не смогли В процессе написания больших и](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_9.jpg "GIL в Python: зачем он нужен и как с этим жить Но программисты снова не смогли В процессе напи...")
сложных программ возник ряд вопросов: • Если программа читает файл, то она ждет, пока операционная система вернет управление. • Асинхронные функции и алгоритмы слишком сложны и не всегда доступны. • Запуск дополнительных процессов слишком долгий. \* \* Для Windows :)
2. ### [Поток • Это процесс без виртуализации памяти :) • Засыпает](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_10.jpg "GIL в Python: зачем он нужен и как с этим жить Поток ● Это процесс без виртуализации памяти :)...")
и просыпается так же, как раньше засыпали и просыпались процессы. • Читает и пишет ту же виртуальную память, что и остальные потоки одного процесса. • Быстро стартует. • При создании процесса создается первый, он же “основной” поток.
3. ### [И что тогда делает Lock в GIL? Если потоки и](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_14.jpg "GIL в Python: зачем он нужен и как с этим жить И что тогда делает Lock в GIL? Если потоки и бе...")
без GIL не выполняются одновременно, то как GIL может, цитируя документацию, “prevent multiple native threads from executing Python bytecodes at once (одновременно)”? А никак. Он не это делает.
4. ### [Как он это делает? Тривиально. Программа не может предотвратить засыпание](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_18.jpg "GIL в Python: зачем он нужен и как с этим жить Как он это делает? Тривиально. Программа не мож...")
своих потоков, но она может контролировать, когда они проснутся. Python принудительно погружает все потоки, кроме текущего, в сон. Они спят и ждут светлого будущего GIL. А когда Python понимает, что текущий поток уже слишком долго работает в гордом одиночестве, - он усыпляет его в ожидаемом месте и будит один из своих спящих потоков.
5. [Что такое тик? Это тик: a = 1](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_24.jpg "GIL в Python: зачем он нужен и как с этим жить Что такое тик? Это тик: a = 1")
6. ### [Версия 3.2 • Потоки спят и ждут GIL не вечно,](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_27.jpg "GIL в Python: зачем он нужен и как с этим жить Версия 3.2 ● Потоки спят и ждут GIL не вечно, а...")
а 5 мс. • Проснувшийся по таймауту поток обижается, выставляет флаг “хочу GIL” и снова засыпает. • Текущий поток в конце каждого тика проверяет наличие флага “хочу GIL” и, если таковой есть, будит один из ожидающих GIL потоков и засыпает. • sys.getswitchinterval, sys.setswitchinterval
7. ### [Итак, что же делает GIL? • В нормальных условиях потоки](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_28.jpg "GIL в Python: зачем он нужен и как с этим жить Итак, что же делает GIL? ● В нормальных условия...")
засыпают и просыпаются по велению операционной системы - часто и неожиданно. • GIL запрещает всем потокам Python, кроме текущего, просыпаться неожиданно. • Текущий поток засыпает и просыпается по велению операционной системы. Но когда Python решает, что пора переключаться, - текущий поток засыпает сам.
8. [И где же здесь проблема? ?](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_29.jpg "GIL в Python: зачем он нужен и как с этим жить И где же здесь проблема? ?")
9. ### [Механизм поднятия GIL GIL защищает от того, что поток A](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_32.jpg "GIL в Python: зачем он нужен и как с этим жить Механизм поднятия GIL GIL защищает от того, что...")
неожиданно уснет, поток B неожиданно проснется и поменяет байтики внутри интерпретатора, которые поток А ну никак не ожидает видеть измененными. Но если в потоке вызвана функция операционной системы для приема данных по сети - это не код python, и он не может поменять байтики в интерпретаторе.
10. [Логическая защита кода threading.Lock threading.Semaphore threading.Event threading.Queue](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_37.jpg "GIL в Python: зачем он нужен и как с этим жить Логическая защита кода threading.Lock threading...")
11. ### [А если много ядер? • Если у вас много ядер](https://files.speakerdeck.com/presentations/a655d9f00cfb01310c903a30d744b908/slide_38.jpg "GIL в Python: зачем он нужен и как с этим жить А если много ядер? ● Если у вас много ядер и вы...")
и вы хотите максимизировать скорость выполнения именно Python кода — значит, у вас очень редкий случай :) • NumPy и SciPy поднимают GIL на долгих операциях (работа с матрицами). • Используйте библиотеки для расчетов • Используйте процессы. |
| Shard | 45 (laksa) |
| Root Hash | 11081820283974128245 |
| Unparsed URL | com,speakerdeck!/moscowdjango/gil-v-python-zachiem-on-nuzhien-i-kak-s-etim-zhit s443 |