SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Обедающие философы
наносят ответный удар
Алексей Фёдоров
@23derevo
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2
The following is intended to outline our general product
direction. It is intended for information purposes only, and may
not be incorporated into any contract. It is not a commitment to
deliver any material, code, or functionality, and should not be
relied upon in making purchasing decisions. The development,
release, and timing of any features or functionality described
for Oracle’s products remains at the sole discretion of Oracle.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3
Агенда
 Проблема обедающих философов
 Проблемы с обедающими философами
 Теория
 Практика на Java
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4
Проблема обедающих философов
Dijkstra, 1965 Hoare, 1985
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5
Проблема обедающих философов
 5 философов по кругу
– Тарелка с едой перед каждым
– Вилки между тарелками
 Каждый может
– Размышлять
– Брать одну вилку
– Есть двумя вилками
– Класть одну вилку
Dijkstra, 1965 Hoare, 1985
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6
Проблемы с обедающими философами
 Пусть каждый философ действует по
некоторому алгоритму
 Могут ли все философы умереть с
голоду
 Можно ли составить такой алгоритм,
чтобы все философы гарантированно
не умерли с голоду?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.7
Параметры задачи
 Количество философов
 Есть ли возможность положить вилку, не пожрамши
 Сколько времени философ ест
– Фиксированное или случайная величина
 Сколько времени философ размышляет
– Фиксированное или случайная величина
– Как это время соотносится с временем еды
 Какие ещё инструменты/элементы есть в системе?
 Что ещё?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.8
Фиксированное время и случайное время
 Случайное время задаётся какой-то функцией распределения
 Константа тоже задаётся функцией распределения
– А бывают ли вообще константы в реальном мире?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.9
Фиксированное время и случайное время
 Случайное время задаётся какой-то функцией распределения
 Константа тоже задаётся функцией распределения
– А бывают ли вообще константы в реальном мире?
200 40 60
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10
Фиксированное время и случайное время
 Случайное время задаётся какой-то функцией распределения
 Константа тоже задаётся функцией распределения
– А бывают ли вообще константы в реальном мире?
200 40 60
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11
Решение
 Как только философ хочет есть, он делает следующие шаги:
1. Берёт левую от себя вилку
2. Берёт правую от себя вилку
3. Ест
4. Кладёт правую от себя вилку
5. Кладёт левую от себя вилку
 И так по кругу
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.12
Моделирование на Java
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13
Стенд
 Dell Latitude E6420
– Intel Core i7
 4 cores x 2 threads = 8 HW threads
 2,2 GHz
– 16 Gb RAM
– Oracle JDK 8 update 5
 Windows 7 SP1
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14
SMALL DEMO
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.15
Теория
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.16
Взаимоблокировка
Ресурс – объект, к которому предоставляется доступ.
Во время работы процесс может брать (захватывать) ресурсы.
Взаимоблокировка – такое состояние системы, при котором
два или более процессов не могут продолжать своё выполнение
из-за отсутствия необходимых для этого ресурсов.
Каждый ждёт другого, поэтому никто не может продолжить
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17
Выгружаемые и невыгружаемые ресурсы
 Выгружаемые ресурсы – ресурсы, которые могут быть
безболезненно отобраны у процесса, который ими обладает
 Невыгружаемые ресурсы – ресурсы, которые нельзя
отобрать у процесса, не вызвав при этом сбой в вычислениях
 Мы будем говорить, в основном, о невыгружаемых ресурсах
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18
Операции над невыгружаемыми ресурсами
 Запрос ресурса
– Берём ресурс или ждём (встаём в «очередь» ожидания)
– Виды блокирующих запросов
 без таймаута
 с таймаутом
 с исключением (ошибкой)
 Использование ресурса
 Освобождение ресурса
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19
Условия возникновения взаимоблокировок
Коффман, 1971
1. Условие взаимного исключения ( ≤ 1 )
2. Условие удержания и ожидания ( 1 + )
3. Условие невыгружаемости ( < )
4. Условие циклического ожидания ( O )
Следствие:
любая стратегия упреждения/обнаружения/устранения
блокировок основана на нарушении какого-то из этих пунктов
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20
Моделирование взаимоблокировок
 Граф ресурсов (Holt, 1972)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21
Стратегии борьбы с блокировками
 Игнорирование проблемы
 Обнаружение и восстановление
 Динамическое уклонение
 Предотвращение за счёт структурного подавления любого
из четырёх необходимых для возникновения условий:
1. Условие взаимного исключения
2. Условие удержания и ожидания
3. Условие невыгружаемости
4. Условие циклического ожидания
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.22
Игнорирование проблемы
 Делаем вид, что проблема отсутствует
– Насколько часто возникает
проблема?
– Как часто возникают сбои в системе
по другим причинам?
– Насколько серьёзны могут быть
последствия?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.23
Обнаружение взаимоблокировок и
восстановление работоспособности
 Шаги
– Позволить блокировке произойти
– Пытаться обнаружить момент возникновения
– Попробовать восстановить работоспособность
 В нашем примере можно просто перезапускать философов
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24
Выход из взаимоблокировки
 Приоритетный захват ресурсов
– Приоритизировать (все) процессы
– Отобрать ресурс у менее приоритетного процесса
 Откат
– Периодически создаются контрольные точки
– При обнаружении блокировки происходит откат
 При откате часть работы (которая была выполнениа
после прохождания последней контрольной точки)
теряется
 Уничтожение и перезапуск процессов
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.25
Уклонение от взаимоблокировки
 Траектории ресурса
 Безопасное и небезопасное состояние
 Алгоритм банкира
– Дейкстра, 1965
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26
Предотвращение взаимоблокировки
 Атака условия взаимного исключения
 Атака условия ожидания и удержания
 Атака условия невыгружаемости
 Атака условия циклического ожидания
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27
Атака условия взаимного исключения
 Редко возможна: часто программа становится некорректной
 Убирать ненужные локи
 Иногда функциональность не страдает
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28
Атака условия ожидания и удержания
 Запрашивать ВСЕ необходимые ресурсы не в процессе
работы, а до начала работы.
– Но не всегда ресурсы известны заранее
 Вначале временно высвободить все удерживаемые ресурсы
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.29
Атака условия невыгружаемости
 Разрешить выгружать!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.30
Атака условия циклического ожидания
 Нумерация ресурсов
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31
DEMO TIME
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.32
Литература
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.33
Литература
Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34
Q&A
 @23derevo
 fyodorov.spbu@gmail.com
 https://bitbucket.org/23derevo/concurrency

Mais conteúdo relacionado

Mais de Alexey Fyodorov

Non-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmNon-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmAlexey Fyodorov
 
How threads help each other
How threads help each otherHow threads help each other
How threads help each otherAlexey Fyodorov
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуAlexey Fyodorov
 
Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Alexey Fyodorov
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itAlexey Fyodorov
 
Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМСAlexey Fyodorov
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Alexey Fyodorov
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!Alexey Fyodorov
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAlexey Fyodorov
 
Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Alexey Fyodorov
 
Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Alexey Fyodorov
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы JavaAlexey Fyodorov
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing worldAlexey Fyodorov
 

Mais de Alexey Fyodorov (14)

Non-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmNon-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithm
 
How threads help each other
How threads help each otherHow threads help each other
How threads help each other
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need it
 
Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМС
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
Java in Motion
Java in MotionJava in Motion
Java in Motion
 
Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)
 
Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы Java
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing world
 

Philosophers

  • 1. Обедающие философы наносят ответный удар Алексей Фёдоров @23derevo
  • 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2 The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
  • 3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3 Агенда  Проблема обедающих философов  Проблемы с обедающими философами  Теория  Практика на Java
  • 4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4 Проблема обедающих философов Dijkstra, 1965 Hoare, 1985
  • 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5 Проблема обедающих философов  5 философов по кругу – Тарелка с едой перед каждым – Вилки между тарелками  Каждый может – Размышлять – Брать одну вилку – Есть двумя вилками – Класть одну вилку Dijkstra, 1965 Hoare, 1985
  • 6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6 Проблемы с обедающими философами  Пусть каждый философ действует по некоторому алгоритму  Могут ли все философы умереть с голоду  Можно ли составить такой алгоритм, чтобы все философы гарантированно не умерли с голоду?
  • 7. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.7 Параметры задачи  Количество философов  Есть ли возможность положить вилку, не пожрамши  Сколько времени философ ест – Фиксированное или случайная величина  Сколько времени философ размышляет – Фиксированное или случайная величина – Как это время соотносится с временем еды  Какие ещё инструменты/элементы есть в системе?  Что ещё?
  • 8. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.8 Фиксированное время и случайное время  Случайное время задаётся какой-то функцией распределения  Константа тоже задаётся функцией распределения – А бывают ли вообще константы в реальном мире?
  • 9. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.9 Фиксированное время и случайное время  Случайное время задаётся какой-то функцией распределения  Константа тоже задаётся функцией распределения – А бывают ли вообще константы в реальном мире? 200 40 60
  • 10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10 Фиксированное время и случайное время  Случайное время задаётся какой-то функцией распределения  Константа тоже задаётся функцией распределения – А бывают ли вообще константы в реальном мире? 200 40 60
  • 11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11 Решение  Как только философ хочет есть, он делает следующие шаги: 1. Берёт левую от себя вилку 2. Берёт правую от себя вилку 3. Ест 4. Кладёт правую от себя вилку 5. Кладёт левую от себя вилку  И так по кругу
  • 12. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.12 Моделирование на Java
  • 13. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13 Стенд  Dell Latitude E6420 – Intel Core i7  4 cores x 2 threads = 8 HW threads  2,2 GHz – 16 Gb RAM – Oracle JDK 8 update 5  Windows 7 SP1
  • 14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14 SMALL DEMO
  • 15. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.15 Теория
  • 16. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.16 Взаимоблокировка Ресурс – объект, к которому предоставляется доступ. Во время работы процесс может брать (захватывать) ресурсы. Взаимоблокировка – такое состояние системы, при котором два или более процессов не могут продолжать своё выполнение из-за отсутствия необходимых для этого ресурсов. Каждый ждёт другого, поэтому никто не может продолжить
  • 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17 Выгружаемые и невыгружаемые ресурсы  Выгружаемые ресурсы – ресурсы, которые могут быть безболезненно отобраны у процесса, который ими обладает  Невыгружаемые ресурсы – ресурсы, которые нельзя отобрать у процесса, не вызвав при этом сбой в вычислениях  Мы будем говорить, в основном, о невыгружаемых ресурсах
  • 18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18 Операции над невыгружаемыми ресурсами  Запрос ресурса – Берём ресурс или ждём (встаём в «очередь» ожидания) – Виды блокирующих запросов  без таймаута  с таймаутом  с исключением (ошибкой)  Использование ресурса  Освобождение ресурса
  • 19. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19 Условия возникновения взаимоблокировок Коффман, 1971 1. Условие взаимного исключения ( ≤ 1 ) 2. Условие удержания и ожидания ( 1 + ) 3. Условие невыгружаемости ( < ) 4. Условие циклического ожидания ( O ) Следствие: любая стратегия упреждения/обнаружения/устранения блокировок основана на нарушении какого-то из этих пунктов
  • 20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20 Моделирование взаимоблокировок  Граф ресурсов (Holt, 1972)
  • 21. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21 Стратегии борьбы с блокировками  Игнорирование проблемы  Обнаружение и восстановление  Динамическое уклонение  Предотвращение за счёт структурного подавления любого из четырёх необходимых для возникновения условий: 1. Условие взаимного исключения 2. Условие удержания и ожидания 3. Условие невыгружаемости 4. Условие циклического ожидания
  • 22. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.22 Игнорирование проблемы  Делаем вид, что проблема отсутствует – Насколько часто возникает проблема? – Как часто возникают сбои в системе по другим причинам? – Насколько серьёзны могут быть последствия?
  • 23. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.23 Обнаружение взаимоблокировок и восстановление работоспособности  Шаги – Позволить блокировке произойти – Пытаться обнаружить момент возникновения – Попробовать восстановить работоспособность  В нашем примере можно просто перезапускать философов
  • 24. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24 Выход из взаимоблокировки  Приоритетный захват ресурсов – Приоритизировать (все) процессы – Отобрать ресурс у менее приоритетного процесса  Откат – Периодически создаются контрольные точки – При обнаружении блокировки происходит откат  При откате часть работы (которая была выполнениа после прохождания последней контрольной точки) теряется  Уничтожение и перезапуск процессов
  • 25. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.25 Уклонение от взаимоблокировки  Траектории ресурса  Безопасное и небезопасное состояние  Алгоритм банкира – Дейкстра, 1965
  • 26. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26 Предотвращение взаимоблокировки  Атака условия взаимного исключения  Атака условия ожидания и удержания  Атака условия невыгружаемости  Атака условия циклического ожидания
  • 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27 Атака условия взаимного исключения  Редко возможна: часто программа становится некорректной  Убирать ненужные локи  Иногда функциональность не страдает
  • 28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28 Атака условия ожидания и удержания  Запрашивать ВСЕ необходимые ресурсы не в процессе работы, а до начала работы. – Но не всегда ресурсы известны заранее  Вначале временно высвободить все удерживаемые ресурсы
  • 29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.29 Атака условия невыгружаемости  Разрешить выгружать!
  • 30. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.30 Атака условия циклического ожидания  Нумерация ресурсов
  • 31. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31 DEMO TIME
  • 32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.32 Литература
  • 33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.33 Литература
  • 34. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34 Q&A  @23derevo  fyodorov.spbu@gmail.com  https://bitbucket.org/23derevo/concurrency