Event: #SE2016
Stage: Exotic
Data: 3 of September 2016
Speaker: Elena Morgun
Topic: GIL in different programming languages
INHACKING site: https://inhacking.com
SE2016 site: http://se2016.inhacking.com/
2. Многопоточность
Многопоточность - возможность процессора или ядра в
многоядерной системе выполнять несколько потоков
параллельно, а так же - соответствующее свойство
платформы, порождающей данные потоки.
4. Поток (thread)
Поток - наименьшая единица
обработки, исполнение которой
может быть назначено ядром
ОС.
Несколько потоков могут
существовать в рамках
процесса и совместно
использовать его ресурсы.
6. Основные отличия потока от процесса
● Процессы - независимы, потоки существуют, как часть
процесса
● Процессы несут больше информации о состоянии,
потоки - только информацию, которую передали в поток
● Процессы имеют отдельное адресное пространство и
взаимодействуют с помощью специальных механизмов
связи между процессами.
7. Потоковая безопасность (thread safety)
Код потокобезопасен, если гарантировано функционирует
корректно при использовании из нескольких потоков
одновременно.
Код условно потокобезопасен, если доступ к данным защищен от
состояния гонки
Код не потокобезопасен, если его работа при использовании из
нескольких потоков не гарантирована (и не рекомендована)
11. Состояние гонки (race condition)
Состояние гонки - поведение многопоточного приложения, при
котором его работа зависит от того, в каком порядке
выполняются части кода.
12. Обеспечение безопасности потока
1. Стиль написания кода, избегающий появления состояний,
которые могут изменяться разными потоками.
2. Синхронизация между потоками, если избежать подобных
состояний невозможно:
a. Мьютексы
b. Использование атомарных операций
13. Что такое мьютекс (Mutual Exclusion)
Мьютекс - объект взаимного исключения, предназначенный для
защиты объекта в потоке от доступа со стороны других потоков.
Мьютексы нужны для блокирования критических секций - частей
приложения, которые не должны быть исполняемы конкурентно.
Когда поток встречает мьютекс, он “закрывает” доступ к данным
для других потоков до “освобождения” мьютекса.
14. Что такое атомарная операция
Атомарная операция - операция, которую нельзя прервать до ее
окончания и кажущаяся для остальной системы моментальной.
Атомарность может быть реализована с помощью блокировки.
Даже если операция по факту не происходит моментально, другие
потоки не могут помешать ее исполнению, пока блокировка не
была снята.
15. Чем нам поможет Mutex?
На этот раз код вернет
корректный результат вне
зависимости от
используемого
интерпретатора.
17. Что такое GIL
Global Interpreter Lock - механизм, используемый в некоторых
интерпретаторах языков для синхронизации исполнения потоков.
В определенный момент времени только один поток может
использовать инстанс интерпретатора. Интерпретатор, в котором
реализован GIL, позволяет выполнять только один поток в один
момент времени, даже в случае запуска на многоядерной
системе.
18. Особенности GIL
● Для достижения параллельного исполнения нужно порождать
процессы (так как у каждого процесса свой интерпретатор и
свой GIL)
● В случае, если приложение запущено в виде одного процесса,
увеличение количество процессоров не дает прироста
производительности.
● Требуется соответствующая архитектура для скалирования
приложения.
19. Плюсы GIL
● Ускорение выполнения кода из-за отсутствия логики
блокирования/разблокирования структур данных.
● Ускорение интеграции с не потокобезопасными
расширениями на языке C
● Более быстрое написание кода (отсутствие необходимости
писать блокировки)