SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Теоретический минимум для
понимания Java Memory Model
© Роман Елизаров, Devexperts, 2014
Закон Мура и “The free lunch is over”
http://www.gotw.ca/publications/concurrency-ddj.htm
Зеленая линия =
Тысяч транзисторов
aka “Закон Мура”
Под ней =
Частота (MHz)
Нужна формальная модель параллельных
вычислений
• Чтобы доказывать:
- корректность алгоритмов
- невозможность построения тех или
иных алгоритмов
- минимально-необходимые требования
для тех или иных алгоритмов
• Для формализации отношений
между прикладным программистом
и разработчиком компилятора и
системы исполнения кода
Модель с общими объектами (общей памятью)
Поток1
Поток2
ПотокN
Общая память
Объект M
Объект 2
Объект 1
Общие объекты
• Потоки выполняют операции над общими, разделяемыми
объектами
• В этой модели не важны операции внутри потоков:
- Вычисления
- Обновления регистров процессора
- Обновления стека потока
- Обновления любой другой локальной для потока памяти
• Важна только коммуникация между потоками
• В этой модели единственный тип коммуникации между
потоками – это работа с общими объектами
Общие переменные
• Общие переменные – это просто простейший тип общего
объекта:
- У него есть значение определенного типа
- Есть операция чтения (read) и записи (write).
• Общие переменные – это базовые строительные блоки для
параллельных алгоритмов
• Модель с общими переменными – это хорошая абстракция
современных многопроцессорных систем и многопоточных ОС
- На практике, это область памяти процесса, которая
одновременно доступна для чтения и записи всем потокам,
исполняемым в данном процессе
В теоретических трудах общие переменные называют регистрами
Свойства параллельных программ
• Последовательные программы детерминированы
- Если нет явного использования случайных чисел и другого
общения с недетерминированным внешним миром
- Их свойства можно установить, анализируя последовательное
исполнение при данных входных параметрах
• Параллельные программы в общем случае
недетерминированы
- Даже если код каждого потока детерминирован
- Результат работы зависит от фактического исполнения при
данных входных параметрах
• А этих исполнений может быть много
- Говорим «программа А имеет свойство 𝑃», если программа A
имеет свойство 𝑃 при любом допустимом исполнении
Моделирование исполнений через
чередование операций
• 𝑆 это общее состояние:
- Состояние всех потоков
- И состояние всех общих объектов
• 𝑓 и 𝑔 это операции над объектами
- Для переменных это операции чтения
(вместе с результатом) и записи
(вместе с значением)
- Количество активных операций равно
количеству потоков
• 𝑓(𝑆) это новое состояние после
применения операции 𝑓 в состоянии 𝑆
𝑔(𝑆)𝑓(𝑆)
𝑆
𝑓 𝑔
Пример
thread P:
0: x = 1
1: print x
2: stop
thread Q:
0: x = 2
1: print x
2: stop
P0,Q0
x=0
(-, -)
P1,Q0
x=1
(-, -)
P0,Q1
x=2
(-, -)
P2,Q0
x=1
(1, -)
P1,Q1
x=2
(-, -)
P1,Q1
x=1
(-, -)
P0,Q2
x=2
(-, 2)
P2,Q2
x=2
(1, 2)
P2,Q2
x=2
(2, 2)
+1 state not shown +2 states not shown
P2,Q2
x=1
(1, 1)
+2 states not shown
P2,Q2
x=1
(2, 1)
+1 state not shown
Всего 17 состояний
shared int x
Обсуждение модели
• Эта модель не «параллельна»
- Все операции происходят последовательно (только порядок
заранее не задан)
• А на самом деле на реальных процессорах операции чтения и
записи памяти не мгновенные и происходит параллельно как
в разных ядрах так и внутри одного ядра
- В реальности процессор обменивается с памятью сообщениями
чтения/записи и таких сообщений находящихся в обработке
одновременно может быть очень много (!)
Модель чередования не отражает фактическую
реальность. Можно ли её использовать для анализа
алгоритмов на практике? Когда её можно использовать?
Физическая реальность (1)
• Свет (электромагнитные волны) в вакууме распространяется
со скоростью ~ 3 ∙ 108
м/c
- Это максимальный физический предел скорости распространения
света. В реальных материалах – медленней.
• За один такт процессора с частотой 3 ГГц (3 ∙ 109
Гц) свет в
вакууме проходит всего 10 см.
- Соседние процессоры на плате физически не могут
синхронизировать свою работу и физически не могут
определить порядок происходящих в них событиях.
- Они работают действительно параллельно.
Физическая реальность (2)
• Пусть 𝑎, 𝑏, 𝑐 ∈ 𝐸 – это физически атомарные (неделимые)
события, происходящие в пространстве-времени
- Говорим «𝑎 предшествует 𝑏» или «𝑎 произошло до 𝑏» (и
записываем 𝑎 → 𝑏), если свет от точки пространства-времени 𝑎
успевает дойти до точки пространства-времени 𝑏
- Это отношение частичного порядка на событиях
x
t
a b
Световой конус
Между 𝑎 и 𝑏 нет предшествования. Они происходят параллельно
с 𝑎 → 𝑐 и 𝑏 → 𝑐
Модель «произошло до»
• Впервые введена Л. Лампортом в 1978 году
• Исполнение системы – это пара (𝐻, → 𝐻)
- 𝐻 – это множество операций 𝑒, 𝑓, 𝑔, … (чтение и запись ячеек
памяти), произошедших во время исполнения
- «→ 𝐻» – это транзитивное, антирефлексивное, асимметричное
отношение (частичный строгий порядок) на множестве операций
- 𝑒 → 𝐻 𝑓 означает что “𝑒 произошло до 𝑓 в исполнении 𝐻”
• Чаще всего исполнение 𝐻 понятно из контекста и опускается
• Две операции 𝑒 и 𝑓 параллельны (𝑒 ∥ 𝑓) если 𝑒 ↛ 𝑓 ⋀ 𝑓 ↛ 𝑒
• Система – это набор всех возможных исполнений системы
- Говорим, что «система имеет свойство 𝑃», если каждое
исполнение системы имеет свойство 𝑃
Модель глобального времени
• В этой модели каждая операция – это временной интервал
𝑒 = 𝑡𝑖𝑛𝑣 𝑒 , 𝑡 𝑟𝑒𝑠𝑝 𝑒 где t 𝑖𝑛𝑣 𝑒 , 𝑡 𝑟𝑒𝑠𝑝(𝑒) ∈ ℝ и
𝑡
P
Q
R
𝑒
𝑓
𝑔
Будем использовать эту модель во всех иллюстрациях
Здесь:
𝑒 → f
𝑒 ∥ 𝑔
𝑓 ∥ 𝑔
𝑒 → 𝑓 ≝ 𝑡 𝑟𝑒𝑠𝑝 𝑒 < 𝑡𝑖𝑛𝑣(𝑓)
Обсуждение глобального времени
• Это всего лишь механизм, позволяющий визуализировать
факт существования параллельных операций
• При доказательстве различных фактов и анализе свойств
[исполнений] системы время не используется
- Анализируются только операции и отношения «произошло до»
На самом деле, никакого глобального
времени нет и не может быть из-за
физических ограничений
Свойства исполнений над общими объектами
http://blog.lib.umn.edu/cspg/electionacademy/images/sharing.jpg
Операции над общими объектами
x.w(1)
объект
операция
аргумент
x.r:1
объект
операция
результат
Запись (write)
общей переменной
Чтение (read)
общей переменной
Последовательное исполнение
• Исполнение системы называется последовательным, если
все операции линейно-упорядочены отношением «произошло
до», то есть ∀𝑒, 𝑓 ∈ 𝐻: 𝑒 = 𝑓 ∨ 𝑒 → 𝑓 ∨ 𝑓 → 𝑒
P
Q
x.w(1)
x.r:1 последовательное
P
Q
x.w(1)
x.r:1 параллельное
Правильное исполнение
• 𝐻 𝑃 – сужение исполнения на поток 𝑃, то есть исполнение, где
остались только операции происходящие в потоке 𝑃
• Исполнение называется правильным (well-formed), если его
сужение на каждый поток 𝑃 является последовательным
историей
P
Q
x.w(1)
x.r: 1 правильное
P
Q
x.w(1)
x.r: 1 неправильное
x.r: 1
x.r: 1
Нас интересуют только правильные исполнения
Последовательная спецификация объекта
• 𝐻 𝑥 – сужение исполнения на объект 𝑥, то есть исполнение,
где остались только операции происходящие над объектом 𝑥
• Если сужение исполнения на объект является
последовательным, то можно проверить его на соответствие
последовательной спецификации объекта
- То, что мы привыкли видеть в обычном мире последовательного
программирования
- Например:
• Чтение переменной должно вернуть последнее записанное
значение.
• Операции deque на объекте FIFO очереди должны
возвращать значения в том порядке, в котором они
передавались в операцию enqueue.
Допустимое последовательное исполнение
• Последовательное исполнение является допустимым (legal),
если выполнены последовательные спецификации всех
объектов
P
Q
x.w(1)
x.r:1
Допустимое
P
Q
x.w(1)
x.r:0
Недопустимое
Условия согласованности (корректности)
• Как определить допустимость параллельного исполнения?
- Сопоставив ему эквивалентное (состоящее из тех же событий и
операций) допустимое последовательное исполнение
- Как именно – тут есть варианты: условия согласованности
• Аналог «корректности» в мире параллельного
программирования
• Условий согласованности много, из них основные
(удовлетворяющие базовому требованию) это:
- Последовательная согласованность
- Линеаризуемость
Базовое требование: корректные
последовательные программы должны
работать корректно в одном потоке
Последовательная согласованность (1)
• Исполнение последовательно согласовано, если можно
сопоставить эквивалентное ему допустимое
последовательное исполнение, которое сохраняет
программный порядок – порядок операций на каждом потоке
P
Q
x.w(1)
x.r:0 Последовательно
согласовано
P
Q
x.w(1)
x.r:2 НЕТ
R
x.r:1
S
x.r:0
x.r:1
Последовательная согласованность (2)
• Используется как условие корректности исполнения всей
системы в целом
- когда нет никакого «внешнего» наблюдателя, который может
«увидеть» фактический порядок между операциями на разных
процессах
• Модель памяти языка программирования и системы
исполнения кода использует последовательную
согласованность
- В том числе, С++11 и Java 5 (JMM = JLS Chapter 17)
Последовательная согласованность не говорит о том, когда
операция физически на самом деле была выполнена
Последовательная согласованность (3)
• Последовательная согласованность на каждом объекте по
отдельности не влечет последовательную согласованность
всего исполнения
P
Q
s.enc(1)
t.enq(2)
t.enc(1)
s.enq(2)
s.deq:2
t.deq:1
ПРИМЕР: (здесь 𝑠 и 𝑡 это две FIFO очереди)
Последовательную согласованность нельзя использовать для
спецификации поведения отдельных объектов в системе
Линеаризуемость
• Исполнение линеаризуемо если можно сопоставить
эквивалентное ему допустимое последовательное
исполнение, которое сохраняет порядок «произошло до»
P
x.w(1)
Последовательно
согласовано,
не линеаризуемо
P
Q
x.w(1)
x.r:0 линеаризуемо
Q
x.r:0
x.r:1
Свойства линеаризуемости
• В линеаризуемом исполнении каждой операции 𝑒 можно
сопоставить некое глобальное время (точку линеаризации)
𝑡 𝑒 ∈ ℝ так, что время разных операций различно и
𝑒 → 𝑓 ⇒ 𝑡 𝑒 < 𝑡(𝑓)
- Это эквивалентное определение линеаризуемости
• Линеаризуемость локальна. Линеаризуемость исполнения на
каждом объекте эквивалентна линеаризуемости исполнения
системы целиком
• Операции над линеаризуемыми объектами называют
атомарными.
- Они происходят как бы мгновенно и в определенном порядке, как
бы в каком-то глобальном времени
Линеаризуемость в глобальном времени
• В глобальном времени исполнение линеаризуемо тогда и
только тогда, когда точки линеаризации могут быть выбраны
так, что
P
Q
x.w(1)
x.r:1
R
x.r:0
линеаризуемо
∀𝑒: 𝑡𝑖𝑛𝑣 𝑒 < 𝑡 𝑒 < 𝑡 𝑟𝑒𝑠𝑝(𝑒)
Исполнение системы, выполняющей операции
над линеаризуемыми (атомарными) объектами,
можно анализировать в модели чередования
Линеаризуемость и чередование
Иерархия линеаризуемых объектов
• Из более простых линеаризуемых объектов можно делать
линеаризуемые объекты более высокого уровня
• Когда говорят что какой-то объект безопасен для
использования из нескольких потоков (thread-safe), то по
умолчанию имеют в виду линеаризуемость операций над ним
Доказав линеаризуемость сложного объекта, можно
абстрагироваться от деталей
реализации в нем, считать операции над ним
атомарными и строить объекты более высокого уровня
Применительно к Java
• Все операции над volatile полями в Java, согласно JMM,
являются операциями синхронизации (17.4.2), которые
всегда линейно-упорядочены в любом исполнении (17.4.4)
- А значит являются линеаризуемыми
• Но операции над не volatile полями воистину могут нарушать
не только линеаризуемость, но и последовательную
согласованность (в отсутствии синхронизации)
P
Q
x.w(1)
x.r:1 допустимо в JMMx.r:0 x.r:1
Рекомендованная литература
В своем блоге elizarov.livejournal.com я размещу ссылки
на научные работы для дополнительного чтения по теме
Спасибо за внимание
Слайды также будут выложены на elizarov.livejournal.com

Weitere ähnliche Inhalte

Was ist angesagt?

Build Real-Time Applications with Databricks Streaming
Build Real-Time Applications with Databricks StreamingBuild Real-Time Applications with Databricks Streaming
Build Real-Time Applications with Databricks StreamingDatabricks
 
Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...
Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...
Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...confluent
 
Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...
Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...
Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...Igor De Souza
 
Elasticsearch in Netflix
Elasticsearch in NetflixElasticsearch in Netflix
Elasticsearch in NetflixDanny Yuan
 
Improving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux ConfigurationImproving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux ConfigurationDataWorks Summit
 
NiFi Developer Guide
NiFi Developer GuideNiFi Developer Guide
NiFi Developer GuideDeon Huang
 
An Introduction to NOSQL, Graph Databases and Neo4j
An Introduction to NOSQL, Graph Databases and Neo4jAn Introduction to NOSQL, Graph Databases and Neo4j
An Introduction to NOSQL, Graph Databases and Neo4jDebanjan Mahata
 
Operating PostgreSQL at Scale with Kubernetes
Operating PostgreSQL at Scale with KubernetesOperating PostgreSQL at Scale with Kubernetes
Operating PostgreSQL at Scale with KubernetesJonathan Katz
 
Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례Hyoungjun Kim
 
Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...HostedbyConfluent
 
Apache Flink Adoption at Shopify
Apache Flink Adoption at ShopifyApache Flink Adoption at Shopify
Apache Flink Adoption at ShopifyYaroslav Tkachenko
 
HATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from RESTHATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from RESTelliando dias
 
Android Push Server & MQTT
Android Push Server & MQTTAndroid Push Server & MQTT
Android Push Server & MQTT광운 이
 
Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher   Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher Tamir Dresher
 
Apache Kafka and the Data Mesh | Michael Noll, Confluent
Apache Kafka and the Data Mesh | Michael Noll, ConfluentApache Kafka and the Data Mesh | Michael Noll, Confluent
Apache Kafka and the Data Mesh | Michael Noll, ConfluentHostedbyConfluent
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiDatabricks
 
Big Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data Tech
Big Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data TechBig Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data Tech
Big Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data TechHostedbyConfluent
 
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?Kai Wähner
 

Was ist angesagt? (20)

Build Real-Time Applications with Databricks Streaming
Build Real-Time Applications with Databricks StreamingBuild Real-Time Applications with Databricks Streaming
Build Real-Time Applications with Databricks Streaming
 
Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...
Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...
Show Me Kafka Tools That Will Increase My Productivity! (Stephane Maarek, Dat...
 
Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...
Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...
Data Engineer, Patterns & Architecture The future: Deep-dive into Microservic...
 
Elasticsearch in Netflix
Elasticsearch in NetflixElasticsearch in Netflix
Elasticsearch in Netflix
 
Improving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux ConfigurationImproving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux Configuration
 
NiFi Developer Guide
NiFi Developer GuideNiFi Developer Guide
NiFi Developer Guide
 
An Introduction to NOSQL, Graph Databases and Neo4j
An Introduction to NOSQL, Graph Databases and Neo4jAn Introduction to NOSQL, Graph Databases and Neo4j
An Introduction to NOSQL, Graph Databases and Neo4j
 
Operating PostgreSQL at Scale with Kubernetes
Operating PostgreSQL at Scale with KubernetesOperating PostgreSQL at Scale with Kubernetes
Operating PostgreSQL at Scale with Kubernetes
 
Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례Presto, Zeppelin을 이용한 초간단 BI 구축 사례
Presto, Zeppelin을 이용한 초간단 BI 구축 사례
 
Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...Handling eventual consistency in a transactional world with Matteo Cimini and...
Handling eventual consistency in a transactional world with Matteo Cimini and...
 
Apache Flink Adoption at Shopify
Apache Flink Adoption at ShopifyApache Flink Adoption at Shopify
Apache Flink Adoption at Shopify
 
HATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from RESTHATEOAS: The Confusing Bit from REST
HATEOAS: The Confusing Bit from REST
 
Android Push Server & MQTT
Android Push Server & MQTTAndroid Push Server & MQTT
Android Push Server & MQTT
 
Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher   Anatomy of a data driven architecture - Tamir Dresher
Anatomy of a data driven architecture - Tamir Dresher
 
Apache Kafka and the Data Mesh | Michael Noll, Confluent
Apache Kafka and the Data Mesh | Michael Noll, ConfluentApache Kafka and the Data Mesh | Michael Noll, Confluent
Apache Kafka and the Data Mesh | Michael Noll, Confluent
 
A Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and HudiA Thorough Comparison of Delta Lake, Iceberg and Hudi
A Thorough Comparison of Delta Lake, Iceberg and Hudi
 
Elk
Elk Elk
Elk
 
Apache Ranger Hive Metastore Security
Apache Ranger Hive Metastore Security Apache Ranger Hive Metastore Security
Apache Ranger Hive Metastore Security
 
Big Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data Tech
Big Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data TechBig Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data Tech
Big Data Kappa | Mark Senerth, The Walt Disney Company - DMED, Data Tech
 
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
Data Warehouse vs. Data Lake vs. Data Streaming – Friends, Enemies, Frenemies?
 

Ähnlich wie Теоретический минимум для понимания Java Memory Model (для JPoint 2014)

Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Roman Elizarov
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаМногопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаRoman Elizarov
 
Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Dmitry Tsitelov
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Dmitry Tsitelov
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovJavaDayUA
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAlexey Fyodorov
 
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияAlexey Paznikov
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Mikhail Kurnosov
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
 
Java Memory Model. Quick introduction.
Java Memory Model. Quick introduction.Java Memory Model. Quick introduction.
Java Memory Model. Quick introduction.Yury Kisliak
 
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...Positive Hack Days
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Stfalcon Meetups
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
модель акторов и C++ что, зачем и как ?
модель акторов и C++ что, зачем и как ?модель акторов и C++ что, зачем и как ?
модель акторов и C++ что, зачем и как ?corehard_by
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla .Net meetup in Kiev, Anzhiiak OleksiiSvitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla .Net meetup in Kiev, Anzhiiak OleksiiSvitla Systems Inc.
 
Lecture1: Introduction to Parallel Computing
Lecture1: Introduction to  Parallel ComputingLecture1: Introduction to  Parallel Computing
Lecture1: Introduction to Parallel ComputingAndrii Rodionov
 

Ähnlich wie Теоретический минимум для понимания Java Memory Model (для JPoint 2014) (20)

Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)Многопоточные Алгоритмы (для BitByte 2014)
Многопоточные Алгоритмы (для BitByte 2014)
 
Многопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и ПрактикаМногопоточное Программирование - Теория и Практика
Многопоточное Программирование - Теория и Практика
 
Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)
 
Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)Multiprocessor Programming Intro (lecture 2)
Multiprocessor Programming Intro (lecture 2)
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисления
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
 
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
 
Java Memory Model. Quick introduction.
Java Memory Model. Quick introduction.Java Memory Model. Quick introduction.
Java Memory Model. Quick introduction.
 
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
Алгоритмы решения задачи о булевой выполнимости (SAT) и их применение в крипт...
 
Rx
RxRx
Rx
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
модель акторов и C++ что, зачем и как ?
модель акторов и C++ что, зачем и как ?модель акторов и C++ что, зачем и как ?
модель акторов и C++ что, зачем и как ?
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla .Net meetup in Kiev, Anzhiiak OleksiiSvitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
 
Lecture1: Introduction to Parallel Computing
Lecture1: Introduction to  Parallel ComputingLecture1: Introduction to  Parallel Computing
Lecture1: Introduction to Parallel Computing
 
Lab5
Lab5Lab5
Lab5
 

Mehr von Roman Elizarov

Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018Roman Elizarov
 
Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Roman Elizarov
 
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017Roman Elizarov
 
Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017Roman Elizarov
 
Scale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOneScale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOneRoman Elizarov
 
Kotlin Coroutines Reloaded
Kotlin Coroutines ReloadedKotlin Coroutines Reloaded
Kotlin Coroutines ReloadedRoman Elizarov
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesRoman Elizarov
 
Introduction to Kotlin coroutines
Introduction to Kotlin coroutinesIntroduction to Kotlin coroutines
Introduction to Kotlin coroutinesRoman Elizarov
 
Non blocking programming and waiting
Non blocking programming and waitingNon blocking programming and waiting
Non blocking programming and waitingRoman Elizarov
 
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems ReviewRoman Elizarov
 
Wait for your fortune without Blocking!
Wait for your fortune without Blocking!Wait for your fortune without Blocking!
Wait for your fortune without Blocking!Roman Elizarov
 
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems ReviewRoman Elizarov
 
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems ReviewRoman Elizarov
 
Why GC is eating all my CPU?
Why GC is eating all my CPU?Why GC is eating all my CPU?
Why GC is eating all my CPU?Roman Elizarov
 
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems ReviewRoman Elizarov
 
Java Serialization Facts and Fallacies
Java Serialization Facts and FallaciesJava Serialization Facts and Fallacies
Java Serialization Facts and FallaciesRoman Elizarov
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure javaRoman Elizarov
 
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems ReviewRoman Elizarov
 
The theory of concurrent programming for a seasoned programmer
The theory of concurrent programming for a seasoned programmerThe theory of concurrent programming for a seasoned programmer
The theory of concurrent programming for a seasoned programmerRoman Elizarov
 

Mehr von Roman Elizarov (20)

Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018Kotlin Coroutines in Practice @ KotlinConf 2018
Kotlin Coroutines in Practice @ KotlinConf 2018
 
Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017Deep dive into Coroutines on JVM @ KotlinConf 2017
Deep dive into Coroutines on JVM @ KotlinConf 2017
 
Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017Introduction to Coroutines @ KotlinConf 2017
Introduction to Coroutines @ KotlinConf 2017
 
Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017Fresh Async with Kotlin @ QConSF 2017
Fresh Async with Kotlin @ QConSF 2017
 
Scale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOneScale Up with Lock-Free Algorithms @ JavaOne
Scale Up with Lock-Free Algorithms @ JavaOne
 
Kotlin Coroutines Reloaded
Kotlin Coroutines ReloadedKotlin Coroutines Reloaded
Kotlin Coroutines Reloaded
 
Lock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin CoroutinesLock-free algorithms for Kotlin Coroutines
Lock-free algorithms for Kotlin Coroutines
 
Introduction to Kotlin coroutines
Introduction to Kotlin coroutinesIntroduction to Kotlin coroutines
Introduction to Kotlin coroutines
 
Non blocking programming and waiting
Non blocking programming and waitingNon blocking programming and waiting
Non blocking programming and waiting
 
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2016 NEERC (Northeastern European Regional Contest) Problems Review
 
Wait for your fortune without Blocking!
Wait for your fortune without Blocking!Wait for your fortune without Blocking!
Wait for your fortune without Blocking!
 
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2015 NEERC (Northeastern European Regional Contest) Problems Review
 
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2014 NEERC (Northeastern European Regional Contest) Problems Review
 
Why GC is eating all my CPU?
Why GC is eating all my CPU?Why GC is eating all my CPU?
Why GC is eating all my CPU?
 
DIY Java Profiling
DIY Java ProfilingDIY Java Profiling
DIY Java Profiling
 
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2013 NEERC (Northeastern European Regional Contest) Problems Review
 
Java Serialization Facts and Fallacies
Java Serialization Facts and FallaciesJava Serialization Facts and Fallacies
Java Serialization Facts and Fallacies
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure java
 
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems ReviewACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
ACM ICPC 2012 NEERC (Northeastern European Regional Contest) Problems Review
 
The theory of concurrent programming for a seasoned programmer
The theory of concurrent programming for a seasoned programmerThe theory of concurrent programming for a seasoned programmer
The theory of concurrent programming for a seasoned programmer
 

Теоретический минимум для понимания Java Memory Model (для JPoint 2014)

  • 1. Теоретический минимум для понимания Java Memory Model © Роман Елизаров, Devexperts, 2014
  • 2. Закон Мура и “The free lunch is over” http://www.gotw.ca/publications/concurrency-ddj.htm Зеленая линия = Тысяч транзисторов aka “Закон Мура” Под ней = Частота (MHz)
  • 3. Нужна формальная модель параллельных вычислений • Чтобы доказывать: - корректность алгоритмов - невозможность построения тех или иных алгоритмов - минимально-необходимые требования для тех или иных алгоритмов • Для формализации отношений между прикладным программистом и разработчиком компилятора и системы исполнения кода
  • 4. Модель с общими объектами (общей памятью) Поток1 Поток2 ПотокN Общая память Объект M Объект 2 Объект 1
  • 5. Общие объекты • Потоки выполняют операции над общими, разделяемыми объектами • В этой модели не важны операции внутри потоков: - Вычисления - Обновления регистров процессора - Обновления стека потока - Обновления любой другой локальной для потока памяти • Важна только коммуникация между потоками • В этой модели единственный тип коммуникации между потоками – это работа с общими объектами
  • 6. Общие переменные • Общие переменные – это просто простейший тип общего объекта: - У него есть значение определенного типа - Есть операция чтения (read) и записи (write). • Общие переменные – это базовые строительные блоки для параллельных алгоритмов • Модель с общими переменными – это хорошая абстракция современных многопроцессорных систем и многопоточных ОС - На практике, это область памяти процесса, которая одновременно доступна для чтения и записи всем потокам, исполняемым в данном процессе В теоретических трудах общие переменные называют регистрами
  • 7. Свойства параллельных программ • Последовательные программы детерминированы - Если нет явного использования случайных чисел и другого общения с недетерминированным внешним миром - Их свойства можно установить, анализируя последовательное исполнение при данных входных параметрах • Параллельные программы в общем случае недетерминированы - Даже если код каждого потока детерминирован - Результат работы зависит от фактического исполнения при данных входных параметрах • А этих исполнений может быть много - Говорим «программа А имеет свойство 𝑃», если программа A имеет свойство 𝑃 при любом допустимом исполнении
  • 8. Моделирование исполнений через чередование операций • 𝑆 это общее состояние: - Состояние всех потоков - И состояние всех общих объектов • 𝑓 и 𝑔 это операции над объектами - Для переменных это операции чтения (вместе с результатом) и записи (вместе с значением) - Количество активных операций равно количеству потоков • 𝑓(𝑆) это новое состояние после применения операции 𝑓 в состоянии 𝑆 𝑔(𝑆)𝑓(𝑆) 𝑆 𝑓 𝑔
  • 9. Пример thread P: 0: x = 1 1: print x 2: stop thread Q: 0: x = 2 1: print x 2: stop P0,Q0 x=0 (-, -) P1,Q0 x=1 (-, -) P0,Q1 x=2 (-, -) P2,Q0 x=1 (1, -) P1,Q1 x=2 (-, -) P1,Q1 x=1 (-, -) P0,Q2 x=2 (-, 2) P2,Q2 x=2 (1, 2) P2,Q2 x=2 (2, 2) +1 state not shown +2 states not shown P2,Q2 x=1 (1, 1) +2 states not shown P2,Q2 x=1 (2, 1) +1 state not shown Всего 17 состояний shared int x
  • 10. Обсуждение модели • Эта модель не «параллельна» - Все операции происходят последовательно (только порядок заранее не задан) • А на самом деле на реальных процессорах операции чтения и записи памяти не мгновенные и происходит параллельно как в разных ядрах так и внутри одного ядра - В реальности процессор обменивается с памятью сообщениями чтения/записи и таких сообщений находящихся в обработке одновременно может быть очень много (!) Модель чередования не отражает фактическую реальность. Можно ли её использовать для анализа алгоритмов на практике? Когда её можно использовать?
  • 11. Физическая реальность (1) • Свет (электромагнитные волны) в вакууме распространяется со скоростью ~ 3 ∙ 108 м/c - Это максимальный физический предел скорости распространения света. В реальных материалах – медленней. • За один такт процессора с частотой 3 ГГц (3 ∙ 109 Гц) свет в вакууме проходит всего 10 см. - Соседние процессоры на плате физически не могут синхронизировать свою работу и физически не могут определить порядок происходящих в них событиях. - Они работают действительно параллельно.
  • 12. Физическая реальность (2) • Пусть 𝑎, 𝑏, 𝑐 ∈ 𝐸 – это физически атомарные (неделимые) события, происходящие в пространстве-времени - Говорим «𝑎 предшествует 𝑏» или «𝑎 произошло до 𝑏» (и записываем 𝑎 → 𝑏), если свет от точки пространства-времени 𝑎 успевает дойти до точки пространства-времени 𝑏 - Это отношение частичного порядка на событиях x t a b Световой конус Между 𝑎 и 𝑏 нет предшествования. Они происходят параллельно с 𝑎 → 𝑐 и 𝑏 → 𝑐
  • 13. Модель «произошло до» • Впервые введена Л. Лампортом в 1978 году • Исполнение системы – это пара (𝐻, → 𝐻) - 𝐻 – это множество операций 𝑒, 𝑓, 𝑔, … (чтение и запись ячеек памяти), произошедших во время исполнения - «→ 𝐻» – это транзитивное, антирефлексивное, асимметричное отношение (частичный строгий порядок) на множестве операций - 𝑒 → 𝐻 𝑓 означает что “𝑒 произошло до 𝑓 в исполнении 𝐻” • Чаще всего исполнение 𝐻 понятно из контекста и опускается • Две операции 𝑒 и 𝑓 параллельны (𝑒 ∥ 𝑓) если 𝑒 ↛ 𝑓 ⋀ 𝑓 ↛ 𝑒 • Система – это набор всех возможных исполнений системы - Говорим, что «система имеет свойство 𝑃», если каждое исполнение системы имеет свойство 𝑃
  • 14. Модель глобального времени • В этой модели каждая операция – это временной интервал 𝑒 = 𝑡𝑖𝑛𝑣 𝑒 , 𝑡 𝑟𝑒𝑠𝑝 𝑒 где t 𝑖𝑛𝑣 𝑒 , 𝑡 𝑟𝑒𝑠𝑝(𝑒) ∈ ℝ и 𝑡 P Q R 𝑒 𝑓 𝑔 Будем использовать эту модель во всех иллюстрациях Здесь: 𝑒 → f 𝑒 ∥ 𝑔 𝑓 ∥ 𝑔 𝑒 → 𝑓 ≝ 𝑡 𝑟𝑒𝑠𝑝 𝑒 < 𝑡𝑖𝑛𝑣(𝑓)
  • 15. Обсуждение глобального времени • Это всего лишь механизм, позволяющий визуализировать факт существования параллельных операций • При доказательстве различных фактов и анализе свойств [исполнений] системы время не используется - Анализируются только операции и отношения «произошло до» На самом деле, никакого глобального времени нет и не может быть из-за физических ограничений
  • 16. Свойства исполнений над общими объектами http://blog.lib.umn.edu/cspg/electionacademy/images/sharing.jpg
  • 17. Операции над общими объектами x.w(1) объект операция аргумент x.r:1 объект операция результат Запись (write) общей переменной Чтение (read) общей переменной
  • 18. Последовательное исполнение • Исполнение системы называется последовательным, если все операции линейно-упорядочены отношением «произошло до», то есть ∀𝑒, 𝑓 ∈ 𝐻: 𝑒 = 𝑓 ∨ 𝑒 → 𝑓 ∨ 𝑓 → 𝑒 P Q x.w(1) x.r:1 последовательное P Q x.w(1) x.r:1 параллельное
  • 19. Правильное исполнение • 𝐻 𝑃 – сужение исполнения на поток 𝑃, то есть исполнение, где остались только операции происходящие в потоке 𝑃 • Исполнение называется правильным (well-formed), если его сужение на каждый поток 𝑃 является последовательным историей P Q x.w(1) x.r: 1 правильное P Q x.w(1) x.r: 1 неправильное x.r: 1 x.r: 1 Нас интересуют только правильные исполнения
  • 20. Последовательная спецификация объекта • 𝐻 𝑥 – сужение исполнения на объект 𝑥, то есть исполнение, где остались только операции происходящие над объектом 𝑥 • Если сужение исполнения на объект является последовательным, то можно проверить его на соответствие последовательной спецификации объекта - То, что мы привыкли видеть в обычном мире последовательного программирования - Например: • Чтение переменной должно вернуть последнее записанное значение. • Операции deque на объекте FIFO очереди должны возвращать значения в том порядке, в котором они передавались в операцию enqueue.
  • 21. Допустимое последовательное исполнение • Последовательное исполнение является допустимым (legal), если выполнены последовательные спецификации всех объектов P Q x.w(1) x.r:1 Допустимое P Q x.w(1) x.r:0 Недопустимое
  • 22. Условия согласованности (корректности) • Как определить допустимость параллельного исполнения? - Сопоставив ему эквивалентное (состоящее из тех же событий и операций) допустимое последовательное исполнение - Как именно – тут есть варианты: условия согласованности • Аналог «корректности» в мире параллельного программирования • Условий согласованности много, из них основные (удовлетворяющие базовому требованию) это: - Последовательная согласованность - Линеаризуемость Базовое требование: корректные последовательные программы должны работать корректно в одном потоке
  • 23. Последовательная согласованность (1) • Исполнение последовательно согласовано, если можно сопоставить эквивалентное ему допустимое последовательное исполнение, которое сохраняет программный порядок – порядок операций на каждом потоке P Q x.w(1) x.r:0 Последовательно согласовано P Q x.w(1) x.r:2 НЕТ R x.r:1 S x.r:0 x.r:1
  • 24. Последовательная согласованность (2) • Используется как условие корректности исполнения всей системы в целом - когда нет никакого «внешнего» наблюдателя, который может «увидеть» фактический порядок между операциями на разных процессах • Модель памяти языка программирования и системы исполнения кода использует последовательную согласованность - В том числе, С++11 и Java 5 (JMM = JLS Chapter 17) Последовательная согласованность не говорит о том, когда операция физически на самом деле была выполнена
  • 25. Последовательная согласованность (3) • Последовательная согласованность на каждом объекте по отдельности не влечет последовательную согласованность всего исполнения P Q s.enc(1) t.enq(2) t.enc(1) s.enq(2) s.deq:2 t.deq:1 ПРИМЕР: (здесь 𝑠 и 𝑡 это две FIFO очереди) Последовательную согласованность нельзя использовать для спецификации поведения отдельных объектов в системе
  • 26. Линеаризуемость • Исполнение линеаризуемо если можно сопоставить эквивалентное ему допустимое последовательное исполнение, которое сохраняет порядок «произошло до» P x.w(1) Последовательно согласовано, не линеаризуемо P Q x.w(1) x.r:0 линеаризуемо Q x.r:0 x.r:1
  • 27. Свойства линеаризуемости • В линеаризуемом исполнении каждой операции 𝑒 можно сопоставить некое глобальное время (точку линеаризации) 𝑡 𝑒 ∈ ℝ так, что время разных операций различно и 𝑒 → 𝑓 ⇒ 𝑡 𝑒 < 𝑡(𝑓) - Это эквивалентное определение линеаризуемости • Линеаризуемость локальна. Линеаризуемость исполнения на каждом объекте эквивалентна линеаризуемости исполнения системы целиком • Операции над линеаризуемыми объектами называют атомарными. - Они происходят как бы мгновенно и в определенном порядке, как бы в каком-то глобальном времени
  • 28. Линеаризуемость в глобальном времени • В глобальном времени исполнение линеаризуемо тогда и только тогда, когда точки линеаризации могут быть выбраны так, что P Q x.w(1) x.r:1 R x.r:0 линеаризуемо ∀𝑒: 𝑡𝑖𝑛𝑣 𝑒 < 𝑡 𝑒 < 𝑡 𝑟𝑒𝑠𝑝(𝑒)
  • 29. Исполнение системы, выполняющей операции над линеаризуемыми (атомарными) объектами, можно анализировать в модели чередования Линеаризуемость и чередование
  • 30. Иерархия линеаризуемых объектов • Из более простых линеаризуемых объектов можно делать линеаризуемые объекты более высокого уровня • Когда говорят что какой-то объект безопасен для использования из нескольких потоков (thread-safe), то по умолчанию имеют в виду линеаризуемость операций над ним Доказав линеаризуемость сложного объекта, можно абстрагироваться от деталей реализации в нем, считать операции над ним атомарными и строить объекты более высокого уровня
  • 31. Применительно к Java • Все операции над volatile полями в Java, согласно JMM, являются операциями синхронизации (17.4.2), которые всегда линейно-упорядочены в любом исполнении (17.4.4) - А значит являются линеаризуемыми • Но операции над не volatile полями воистину могут нарушать не только линеаризуемость, но и последовательную согласованность (в отсутствии синхронизации) P Q x.w(1) x.r:1 допустимо в JMMx.r:0 x.r:1
  • 32. Рекомендованная литература В своем блоге elizarov.livejournal.com я размещу ссылки на научные работы для дополнительного чтения по теме
  • 33. Спасибо за внимание Слайды также будут выложены на elizarov.livejournal.com