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