se2016 exotic elena morgun "gil in different programming languages"

20
GIL In a nutshell

Upload: inhacking

Post on 22-Jan-2018

84 views

Category:

Technology


2 download

TRANSCRIPT

GILIn a nutshell

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

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

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

Frequency scaling?

2004

Поток (thread)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что такое GIL

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

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

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

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

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

Плюсы GIL

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

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

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

Спасибо!