Основы многопоточного и распределенного программирования

Процессы и синхронизация


_______________________________Глава 2

Процессы и синхронизация

Параллельным программам присуща более высокая сложность по сравнению с последова­тельными. Они соотносятся с последовательными программами, как шахматы с шашками или бридж с "дураком": и те и другие интересны, но первые гораздо интеллектуальнее последних.

В этой главе исследуется "игра" в параллельное программирование, здесь подробнее рас­смотрены ее правила, фигуры и стратегии. Эти правила являются формальными инструмен­тами, которые помогают понимать и разрабатывать правильные программы. Фигуры — это конструкции языка для описания параллельных вычислений, а стратегии — полезные методы программирования.

В предыдущей главе были представлены процессы и синхронизация, а также приведены примеры их использования. Здесь они рассматриваются подробнее. В разделе 2.1 кратко опи­сывается семантика (смысл) параллельных программ и представлены пять основных поня­тий: состояние программы, неделимое действие, история, свойства безопасности и живуче­сти. В разделах 2.2 и 2.3 эти понятия поясняются двумя примерами — поиск шаблона в файле и поиск в массиве максимального значения. Изучаются также способы распараллеливания программ, рассматривается необходимость неделимых действий и синхронизации. В разде­ле 2.4 определяются неделимые действия (примитивы) и вводится оператор await как сред­ство выражения примитивов и синхронизации. В разделе 2.5 показано, как программировать синхронизацию, которая встречается в программах типа "производитель-потребитель".

В разделе 2.6 представлен краткий обзор аксиоматической семантики последовательных и па­раллельных программ. Новая фундаментальная проблема, возникающая в параллельных програм­мах, — это возможность взаимного влияния (вмешательства). В разделе 2.7 описаны четыре метода его устранения: непересекающиеся множества переменных, ослабленные утверждения, гло­бальные инварианты и синхронизация. Наконец, в разделе 2.8 показано, как доказывать выпол­нение свойств безопасности, и определены стратегии планирования и понятие справедливости.

Многие концепции представлены в этой главе подробно, поэтому их, возможно, нелегко по­нять при первом прочтении. Но, пожалуйста, будьте настойчивы, изучайте примеры и при необхо­димости возвращайтесь к этой главе. Представленные в ней концепции важны, поскольку обеспе­чивают основу для разработки и понимания параллельных программ. Дисциплинированный подход важен для последовательных программ и обязателен для параллельных, поскольку поря­док, в котором выполняются процессы, не детерминирован. В любом случае, приступим к игре!



Содержание раздела