Python: GIL MultiThreading


The Presentation inside:

Slide 0

Python: GIL MultiThreading Stacy Khomenko, GlobalLogic


Slide 1

Многопоточность


Slide 2

Multithreading Потоки нужны для произведения параллельных вычислений Потоки нужно: Создавать Ожидать Завершать


Slide 3

Совместное использование ресурсов Взаимоисключения (mutex) Критическая секция (fast mutex,  futex) Семафоры (пул ресурсов) События


Slide 4

Изменяемые объекты Неизменяемые Изменяемые, не имеющие представления о потоках Мониторы Активные объекты


Slide 5

Mutex


Slide 6

Мониторы


Slide 7

Thread Pools – concurrent.futures Новинка Python 3.2 future - отложенное значение


Slide 8

Активные объекты


Slide 9

Global Interpreter Lock


Slide 10

Global Interpreter Lock Global Interpreter Lock (GIL) - особый алгоритм мьютекса (лока), накладываемый на поток интерпретатора для исключения одновременного потоково-небезопасного доступа к общим ресурсам.


Slide 11

Global Interpreter Lock GIL используется в Cpython, Ruby, PHP GIL в Python v.2.x и v.3.2 различается существенно Python branches 2.x и v.3.x – обратно несовместимы


Slide 12

GIL in Python 2.x


Slide 13

GIL in Python 2.x Одновременно исполняется лишь поток интерпретатора 100 тиков (инструкций) Освобождается на время операций ввода-вывода, простых арифметических операций


Slide 14

GIL in Python 2.x – 1 CPU


Slide 15

GIL in Python 2.x Последовательный запуск Выполнение отнимает 13 sec


Slide 16

GIL in Python 2.x – N CPU Параллельный запуск на 2х процессорном PC Выполнение отнимает 30 sec


Slide 17


Slide 18

GIL in Python 2.x – N CPU Проблема Control-C


Slide 19

GIL in Python 2.x – N CPU Слишком много сигналов CPU-потоки блокируют IO-потоки (неверная расстановка приоритетов)


Slide 20

Почему такой алгоритм GIL? Guido van Rossum: “… Нужно переписать половину интерпетатора – трудоемко В результате замедлится выполнение всех инструкций Python – бессмысленно Используйте модули ‘processing’, parallelpython, Pypar, pyMPI Возьмите Jython, IronPython, etc и боритесь с dead-lock’ами…”


Slide 21

GIL in Python 3.2


Slide 22

GIL in Python 3.2 Тайм-аут для переключения между потоками (5 ms) вместо количества операций (100) Рабочая приоритетизация Существенное уменьшение количества сигналов и другого “мусора”


Slide 23

GIL in Python 3.2 Теперь необходимо 21 sec в обоих случаях


Slide 24

GIL in Python 3.2


Slide 25

Выводы Python v.3.2 GIL работает существенно эффективнее В Python многопоточность возможна!


Slide 26

Thank you This presentation was made using researches of David Beazley and Andrew Svetlov


×

HTML:





Ссылка: