Top Banner
GIL In a nutshell
20

SE2016 Exotic Elena Morgun "GIL in different programming languages"

Jan 22, 2018

Download

Technology

Inhacking
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SE2016 Exotic Elena Morgun "GIL in different programming languages"

GILIn a nutshell

Page 2: SE2016 Exotic Elena Morgun "GIL in different programming languages"

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

Многопоточность - возможность процессора или ядра в многоядерной системе выполнять несколько потоков параллельно, а так же - соответствующее свойство

платформы, порождающей данные потоки.

Page 3: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Frequency scaling?

2004

Page 4: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Поток (thread)

Поток - наименьшая единица обработки, исполнение которой может быть назначено ядром ОС.

Несколько потоков могут существовать в рамках процесса и совместно использовать его ресурсы.

Page 5: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Приложение с несколькими процессами

Page 6: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Основные отличия потока от процесса

● Процессы - независимы, потоки существуют, как часть процесса

● Процессы несут больше информации о состоянии, потоки - только информацию, которую передали в поток

● Процессы имеют отдельное адресное пространство и взаимодействуют с помощью специальных механизмов связи между процессами.

Page 7: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Потоковая безопасность (thread safety)

Код потокобезопасен, если гарантировано функционирует корректно при использовании из нескольких потоков одновременно.

Код условно потокобезопасен, если доступ к данным защищен от состояния гонки

Код не потокобезопасен, если его работа при использовании из нескольких потоков не гарантирована (и не рекомендована)

Page 8: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Пример небезопасного кода

Page 9: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Что происходит на самом деле

Page 10: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Еще один пример

Page 11: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Состояние гонки (race condition)

Состояние гонки - поведение многопоточного приложения, при котором его работа зависит от того, в каком порядке выполняются части кода.

Page 12: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Обеспечение безопасности потока

1. Стиль написания кода, избегающий появления состояний, которые могут изменяться разными потоками.

2. Синхронизация между потоками, если избежать подобных состояний невозможно:a. Мьютексыb. Использование атомарных операций

Page 13: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Что такое мьютекс (Mutual Exclusion)

Мьютекс - объект взаимного исключения, предназначенный для защиты объекта в потоке от доступа со стороны других потоков.

Мьютексы нужны для блокирования критических секций - частей приложения, которые не должны быть исполняемы конкурентно.

Когда поток встречает мьютекс, он “закрывает” доступ к данным для других потоков до “освобождения” мьютекса.

Page 14: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Что такое атомарная операция

Атомарная операция - операция, которую нельзя прервать до ее окончания и кажущаяся для остальной системы моментальной.

Атомарность может быть реализована с помощью блокировки. Даже если операция по факту не происходит моментально, другие потоки не могут помешать ее исполнению, пока блокировка не была снята.

Page 15: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Чем нам поможет Mutex?

На этот раз код вернет корректный результат вне зависимости от используемого интерпретатора.

Page 16: SE2016 Exotic Elena Morgun "GIL in different programming languages"

GIL (наконец-то!)

Page 17: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Что такое GIL

Global Interpreter Lock - механизм, используемый в некоторых интерпретаторах языков для синхронизации исполнения потоков. В определенный момент времени только один поток может использовать инстанс интерпретатора. Интерпретатор, в котором реализован GIL, позволяет выполнять только один поток в один момент времени, даже в случае запуска на многоядерной системе.

Page 18: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Особенности GIL

● Для достижения параллельного исполнения нужно порождать процессы (так как у каждого процесса свой интерпретатор и свой GIL)

● В случае, если приложение запущено в виде одного процесса, увеличение количество процессоров не дает прироста производительности.

● Требуется соответствующая архитектура для скалирования приложения.

Page 19: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Плюсы GIL

● Ускорение выполнения кода из-за отсутствия логики блокирования/разблокирования структур данных.

● Ускорение интеграции с не потокобезопасными расширениями на языке C

● Более быстрое написание кода (отсутствие необходимости писать блокировки)

Page 20: SE2016 Exotic Elena Morgun "GIL in different programming languages"

Спасибо!