SlideShare a Scribd company logo
GIL
In 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
● Более быстрое написание кода (отсутствие необходимости
писать блокировки)
Спасибо!

More Related Content

PDF
Android осень 2013 лекция 3
PDF
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
PDF
Linux Multi-Touch intro
PPT
Myaso
PPTX
Multithreading in go
PDF
Дмитрий Еманов — Под капотом серверного ПО
PDF
Пространства имен Linux (linux namespaces)
PDF
Linuxvirt seminar-csc-2015
Android осень 2013 лекция 3
Оракулы для блокчейнов. Обзор платформы Exonum. Спикер: Алексей Сидоров
Linux Multi-Touch intro
Myaso
Multithreading in go
Дмитрий Еманов — Под капотом серверного ПО
Пространства имен Linux (linux namespaces)
Linuxvirt seminar-csc-2015

What's hot (12)

PDF
monit — простой мониторинг
PPT
Root Conf2009 Fin
PDF
Git - распределенная система контроля версий
PPT
лекция 3 кмсзи симметричные криптографические системы
PPTX
Спецкурс 2014, занятие 8. Транзакции в БД
PDF
What's missing from upstream kernel containers? - Sergey Bronnikov
PDF
Управление памятью контейнеров в проекте OpenVZ -- Владимир Давыдов
PDF
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
PPTX
Современные возможности ES-2015 (Promise, Generators, Proxy).
PDF
Fedora Cryptoconsolidation
PPT
46
PDF
Mercurial vs Svn
monit — простой мониторинг
Root Conf2009 Fin
Git - распределенная система контроля версий
лекция 3 кмсзи симметричные криптографические системы
Спецкурс 2014, занятие 8. Транзакции в БД
What's missing from upstream kernel containers? - Sergey Bronnikov
Управление памятью контейнеров в проекте OpenVZ -- Владимир Давыдов
Алексей Кулаков - Современные возможности ES-2015 (Promise, Generators, Proxy)
Современные возможности ES-2015 (Promise, Generators, Proxy).
Fedora Cryptoconsolidation
46
Mercurial vs Svn
Ad

Viewers also liked (13)

PPTX
Eπισκεφτείτε τα υπέροχα ελληνικά νησιά
PDF
SE2016 Android Ievgen Umanets "Right way of syncing"
PPT
Learn java
PDF
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
PPT
Java encapsulation
PPT
Collection in java
PDF
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
PDF
SE2016 Exotic Oleg Gorbunov "Action cable"
PDF
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
PDF
SE2016 iOS Alexander Voronov "Test driven development in real world"
PPT
PPT
Accessmodifier
PPT
Java networing
Eπισκεφτείτε τα υπέροχα ελληνικά νησιά
SE2016 Android Ievgen Umanets "Right way of syncing"
Learn java
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
Java encapsulation
Collection in java
SE2016 JS Gregory Shehet "Undefined on prod, or how to test a react application"
SE2016 Exotic Oleg Gorbunov "Action cable"
SE2016 Management Vitalii Laptenok "Processes and planning for a product comp...
SE2016 iOS Alexander Voronov "Test driven development in real world"
Accessmodifier
Java networing
Ad

More from Inhacking (20)

PDF
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
PDF
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
PDF
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
PDF
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
PDF
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
PDF
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
PDF
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
PDF
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
PDF
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
PDF
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
PDF
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
PDF
SE2016 Management Yana Prolis "Please don't burn down!"
PDF
SE2016 Management Marina Bril "Management at marketing teams and performance"
PDF
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
PDF
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
PDF
SE2016 Java Vladimir Mikhel "Scrapping the web"
PDF
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
PDF
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
PDF
SE2016 Java Dmytro Panin "JHipster: Create a Spring Boot + AngularJS project ...
PDF
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...
SE2016 Fundraising Roman Kravchenko "Investment in Ukrainian IoT-Startups"
SE2016 Fundraising Wlodek Laskowski "Insider guide to successful fundraising ...
SE2016 Fundraising Andrey Sobol "Blockchain Crowdfunding or "Mommy, look, I l...
SE2016 Company Development Valentin Dombrovsky "Travel startups challenges an...
SE2016 Company Development Vadym Gorenko "How to pass the death valley"
SE2016 Marketing&PR Jan Keil "Do the right thing marketing for startups"
SE2016 PR&Marketing Mikhail Patalakha "ASO how to start and how to finish"
SE2016 UI/UX Alina Kononenko "Designing for Apple Watch and Apple TV"
SE2016 Management Mikhail Lebedinkiy "iAIST the first pure ukrainian corporat...
SE2016 Management Anna Lavrova "Gladiator in the suit crisis is our brand!"
SE2016 Management Aleksey Solntsev "Management of the projects in the conditi...
SE2016 Management Yana Prolis "Please don't burn down!"
SE2016 Management Marina Bril "Management at marketing teams and performance"
SE2016 iOS Anton Fedorchenko "Swift for Server-side Development"
SE2016 JS Alexey Osipenko "Basics of functional reactive programming"
SE2016 Java Vladimir Mikhel "Scrapping the web"
SE2016 Java Valerii Moisieienko "Apache HBase Workshop"
SE2016 Java Roman Ugolnikov "Migration and source control for your DB"
SE2016 Java Dmytro Panin "JHipster: Create a Spring Boot + AngularJS project ...
SE2016 Java Dmitriy Kouperman "Working with legacy systems. Stabilization, mo...

SE2016 Exotic Elena Morgun "GIL in different programming languages"

  • 2. Многопоточность Многопоточность - возможность процессора или ядра в многоядерной системе выполнять несколько потоков параллельно, а так же - соответствующее свойство платформы, порождающей данные потоки.
  • 4. Поток (thread) Поток - наименьшая единица обработки, исполнение которой может быть назначено ядром ОС. Несколько потоков могут существовать в рамках процесса и совместно использовать его ресурсы.
  • 6. Основные отличия потока от процесса ● Процессы - независимы, потоки существуют, как часть процесса ● Процессы несут больше информации о состоянии, потоки - только информацию, которую передали в поток ● Процессы имеют отдельное адресное пространство и взаимодействуют с помощью специальных механизмов связи между процессами.
  • 7. Потоковая безопасность (thread safety) Код потокобезопасен, если гарантировано функционирует корректно при использовании из нескольких потоков одновременно. Код условно потокобезопасен, если доступ к данным защищен от состояния гонки Код не потокобезопасен, если его работа при использовании из нескольких потоков не гарантирована (и не рекомендована)
  • 9. Что происходит на самом деле
  • 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 ● Более быстрое написание кода (отсутствие необходимости писать блокировки)