Слайд 1Python: GIL
MultiThreading
Stacy Khomenko, GlobalLogic
Слайд 3Multithreading
Потоки нужны для произведения параллельных вычислений
Потоки нужно:
Создавать
Ожидать
Завершать
Слайд 4Совместное использование ресурсов
Взаимоисключения (mutex)
Критическая секция (fast mutex, futex)
Семафоры (пул ресурсов)
События
Слайд 5Изменяемые объекты
Неизменяемые
Изменяемые, не имеющие представления о потоках
Мониторы
Активные объекты
Слайд 8Thread Pools – concurrent.futures
Новинка Python 3.2
future - отложенное значение
Слайд 11Global Interpreter Lock
Global Interpreter Lock (GIL) - особый алгоритм мьютекса (лока),
накладываемый на поток интерпретатора для исключения одновременного потоково-небезопасного доступа к общим ресурсам.
Слайд 12Global Interpreter Lock
GIL используется в Cpython, Ruby, PHP
GIL в Python v.2.x
и v.3.2 различается существенно
Python branches 2.x и v.3.x – обратно несовместимы
Слайд 14GIL in Python 2.x
Одновременно исполняется лишь поток интерпретатора
100 тиков (инструкций)
Освобождается
на время операций ввода-вывода, простых арифметических операций
Слайд 16GIL in Python 2.x
Последовательный запуск
Выполнение отнимает 13 sec
Слайд 17GIL in Python 2.x – N CPU
Параллельный запуск на 2х процессорном
PC
Выполнение отнимает 30 sec
Слайд 19GIL in Python 2.x – N CPU
Проблема Control-C
Слайд 20GIL in Python 2.x – N CPU
Слишком много сигналов
CPU-потоки блокируют IO-потоки
(неверная расстановка приоритетов)
Слайд 21Почему такой алгоритм GIL?
Guido van Rossum: “…
Нужно переписать половину интерпетатора –
трудоемко
В результате замедлится выполнение всех инструкций Python – бессмысленно
Используйте модули ‘processing’, parallelpython, Pypar, pyMPI
Возьмите Jython, IronPython, etc и боритесь с dead-lock’ами…”
Слайд 23GIL in Python 3.2
Тайм-аут для переключения между потоками (5 ms) вместо
количества операций (100)
Рабочая приоритетизация
Существенное уменьшение количества сигналов и другого “мусора”
Слайд 24GIL in Python 3.2
Теперь необходимо 21 sec в обоих случаях
Слайд 26Выводы
Python v.3.2 GIL работает существенно эффективнее
В Python многопоточность возможна!
Слайд 27
Thank you
This presentation was made using researches of David Beazley and
Andrew Svetlov