Введение в многопоточность Докладчики: Илья Шишкарев Дата: 05. 07. 2016
План 1. Краткий исторический обзор многопоточности 2. Терминология многопоточности 3. Основная проблематика 4. Основные методы синхронизации 5. Место многопоточности в Java 2
Исторический экскурс 1980 -е гг. - зарождение 1990 -е гг. - Windows NT 1995 г. - Java 2000 г. -. NET
Процессы и потоки Процесс - это совокупность кода и данных, разделяющих общее виртуальное адресное пространство. Поток - единица исполнения кода. Каждый поток последовательно выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.
Потоки и процессы
Атомарность Атомарная операция- операция, выполняющаяся как единое целое, либо не выполняющаяся вовсе. Атомарная операция -операция в общей области памяти, которая завершается в один шаг относительно других потоков, имеющих доступ к этой памяти.
Race condition Состояние гонки(race condition) - следствие ошибки в проектировании многопоточной системы, при которой результат работы системы зависит от порядка, в котором потоки выполняю интсрукции, и (иногда) нарушает заложенную логику системы.
Пути решения Очевидно, проблему нужно как-то решать. Можно выделить несколько способов: локальное копирование; синхронизация; Стоит заметить, что не существует очевидных и простых способов решения проблемы. Проще изначально проектировать систему с оглядкой на многопоточность.
Основные концепции синхронизации потоков мьютекс семафор монитор барьерная синхронизация
Мьютекс – объект синхронизации, позволяющий ондовременный доступ только одного потока к критической секции. Может находиться в двух состояниях: открытом и закрытом.
Семафор – обобщение понятия мьютекса на случай n потоков, где n – натуральное. Семафор позволяет одновременный доступ не более чем n потокам.
Монитор — в языках программирования, высокоуровневый механизм взаимодействия и синхронизации процессов, обеспечивающий доступ к неразделяемым ресурсам. Монитор включает в себя: мьютекс; набор процедур для взаимодействия с общим ресурсом; переменные, связанные с этим ресурсом.
Барьерная синхронизация – метод синхронизации, позволяющий задавать точки сбора для нескольких потоков с целью объединения результатов их работы. Барьер для нескольких поток в некотором месте кода означает, что каждый поток должен сотаваться в этом месте, дожидаясь выполнения остальных потоков группы. После этого выполнение потоков продолжается.
Взаимная блокировка (deadlock) ситуация в многопоточном программировании, когда несколько потоков находятся в состоянии бесконечного ожидания ресурсов, занятого самими этими потоками.
Многопоточность в Java поддерживает многопоточность out of the box. Мониторы реализованы на уровне встроенных механизмом языка. К услугам разработчиков богатая коллекция примитивов сихнронизации, атомарные обертки и т. д.
Вопросы?