Similar presentations:
GIL
1.
Что такое GIL?Как он влияет на многопоточность в Python?
Подготовили: Лузин Даниэль и Телегин Богдан
2.
Что же такое GILGIL - это мьютекс, который действует как ограничитель,
позволяющий только одному потоку выполнять байткод Python в
один момент времени.
3.
Пример №1Да, создается 2 потока, но в
один момент времени выполняется
только ОДИН!
4.
Пример №2В этом примере мы создаем два
потока для вывода чисел и букв.
Обратите внимание, что
блокировка GIL НЕ ВЛИЯЕТ на
этот пример, так как он
включает ожидание вывода на
экране (print), что является
операцией ввода-вывода.
5.
Пример №3В этом примере два потока
пытаются инкрементировать общий
счетчик counter. Вследствие
блокировки GIL, результат этой
операции может быть
НЕОПРЕДЕЛЕННЫМ и зависит от
того, какой поток получит
доступ к счетчику в данный
момент.
6.
Почему он вообще есть тогдаPython создавался с упором на простоту и удобство разработки.
● Списки и словари могут быть изменены в процессе
выполнения
=> Если будет выполняться в многопотоке – нестабильная работа
(в других языках это решается тем, что такие структуры данных
неизменяемы в процессе итерации по ним)
7.
Как обойти GILДля CPU-bound задач
Для I/O-bound задач
- используем multiprocessing
- асинхронное выполнение
(asyncio)
Потому что на каждый процесс
есть отдельный интерпретатор,
т.е. свой GIL на каждый
процесс
Перекладываем выполнение кода
с потоков на задачи
8.
ЗаключениеGIL - это особенность интерпретатора Python, которая
ограничивает одновременное выполнение нескольких потоков
Python-кода в одном процессе. Это ограничение может стать
вызовом для разработчиков, особенно тех, кто сталкивается с
многозадачностью и параллельной обработкой данных.