2. Из чего сделана эта презентация
3 доклада David Beazley:
● Inside the Python GIL, июнь 2009
● Inside the New GIL, январь 2010
● Understanding the Python GIL,
февраль 2010
http://www.dabeaz.com/GIL/
- Специфический внутряк для
разработчиков ядра питона
+ Свежие тесты
3. Немного о потоках
● для распараллеливания однотипных
задач
● используется pthread
Отличия от процессов
● поток – наименьшая единица обработки
● поток – составной элемент процесса
● потоки работают в едином адресном
пространстве
● потоки “дешевле” и, обычно, ОС проще
ими манипулировать
11. Потоки в Python
● Существует GIL и гарантирует
последовательное выполнение байткода
● Каждые 100 тиков: освобождение и захват
GIL
● 1 тик – одна или более инструкций
байткода
● IO освобождает GIL
● Си-модули могут освобождать GIL
● Освобождение и захват GIL –
дополнительные накладные расходы
20. Промежуточные итоги
● Код параллельно не выполняется
● Но IO (всегда) и CPython расширения
(некоторые) освобождают GIL
● Нет планировщика потоков
● Сигналы обрабатываются в главном
потоке
● Потоки с интенсивным использованием
CPU передерживают GIL
● Провальные попытки захвата GIL
21. Зачем нужен GIL?
● Защита операций работы с памятью в
ядре
● Упрощение кода
● Скорость выше, если код проще
22. GIL в python 3.2
● Первое серьёзное изменение со времён
1992 года
● Вместо счётчика тиков - gil_drop_request
● Также добавлен таймаут в 5мс
27. Какие планы по GIL
Его заменят, если новый подход будет:
● простым
● увеличит скорость для многопоточных
программ
● не изменит скорость для однопоточных
● будет совместим с текущим API ядра
● оставит такое же поведение GC
28. Как обойти GIL
● Для IO этого делать не надо
● Использовать специализированные
библиотеки:
https://wiki.python.org/moin/ParallelProcessing
(например scipy)
● Использовать другие интерпретаторы
● Использовать multiprocessing
32. Выводы
● Параллельной многопоточности в Python
по умолчанию нет
● Она частично существует для
специализированных расширений и
операций IO
● GIL почти никогда не мешает
● А когда мешает мы знаем как с этим
бороться