Введение
В этой книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Особое внимание уделяется применению стандартной С++-библиотеки, алгоритмов и контейнерных классов в распределенных и параллельных средах. Кроме того, мы подробно разъясняем методы расширения возможностей языка С++, направленные на решение задач программирования этой категории, с помощью библиотек классов и функций. При этом нас больше всего интересует характер взаимодействия средств С++ с новыми стандартами POSIX и Single UNIX применительно к организации многопоточной обработки. Здесь рассматриваются вопросы объединения С++-программ с программами, написанными на других языках программирования, для поиска «многоязычных» решений проблем распределенного и параллельного программирования, а также некоторые методы организации программного обеспечения, предназначенные для поддержки этого вида программирования.
В книге показано, как преодолеть основные трудности параллелизма, и описано, что понимается под производным распараллеливанием. Мы сознательно уделяем внимание
Этапы большого пути
При написании параллельных или распределенных программ, как правило, необходимо «пройти» следующие три основных этапа.
1. Идентификация естественного параллелизма, который существует в контексте предметной области.
2. Разбиение задачи, стоящей перед программным обеспечением, на несколько подзадач, которые можно выполнять одновременно, чтобы достичь требуемого уровня параллелизма.
3. Координация этих задач, позволяющая обеспечить корректную и эффективную работу программных средств в соответствии с их назначением.
Эти три этапа достигаются при условии параллельного решения следующих проблем:
• «гонка» данных
• обнаружение взаимоблокировки
• частичный отказ
• бесконечное ожидание
• взаимоблокировка
• отказ средств коммуникации
• регистрация завершения работы
• отсутствие глобального состояния
• проблема многофазной синхронизации
• несоответствие протоколов
• локализация ошибок
• отсутствие средств централизованного
• распределения ресурсов
В этой книге разъясняются все названные проблемы, причины их возникновения и возможные пути решения.