Параллельное и распределенное программирование на С++
Шрифт:
Модели создания и функционирования потоков
Модель делегирования
Модель с равноправными узлами
Модель конвейера
Модель «изготовитель-потребитель»
Модели SPMD и МРМD для потоков
Введение в библиотеку Pthread
Анатомия простой многопоточной программы
Компиляция и компоновка многопоточных программ
Создание потоков
Получение идентификатора потока
Присоединение потоков
Создание открепленных потоков
Использование
Создание открепленных потоков с помощью объекта атрибутов
Управление потоками
Завершение потоков
Точки аннулирования потоков
Очистка перед завершением
Управление стеком потока
Установка атрибутов планирования и свойств потоков
Установка области конкуренции потока
Использование функции sysconf
Управление критическими разделами
Безопасность использования потоков и библиотек
Разбиение программы на несколько потоков
Использование модели делегирования
Использование модели сети с равноправными узлами
Использование модели конвейера
Использование модели «изготовитель-потребитель»
Создание многопоточных объектов
Резюме
Синхронизация параллельно выполняемых задач
Координация порядка выполнения потоков
Взаимоотношения между синхронизируемыми задачами
Отношения типа старт-старт (CC)
Отношения типа финиш-старт (ФС)
Отношения типа старт-финиш (СФ)
Отношения типа финиш-финиш (ФФ)
Синхронизация доступа к данным
Модель РРАМ
Параллельный и исключающий доступ к памяти
Что такое семафоры
Операции по управлению семафором
Мьютексные семафоры
Использование мьютексного атрибутного объекта
Использование мьютексных семафоров для управления критическими разделами
Блокировки для чтения и записи
Использование блокировок чтения-записи для реализации стратегии доступа
Условные переменные
Использование условных переменных для управления отношениями синхронизации
Объектно-ориентированный подход к синхронизации
Резюме
Объединение возможностей параллельного программирования и C++ средств на основе PVM
Классические модели параллелизма, поддерживаемые системой PVM
Библиотека PVM для языка С++
Компиляция и компоновка C++/PVM-npoгpaмм
Выполнение PVM-программы в виде двоичного файла
Запуск PVM-программ c помощью PVM-консоли
Запуск PVM-программ c помощью XPVM
Требования к PVM-программам
Объединение динамической С++-библиотеки c библиотекой PVM
Методы использования PVM-задач
Реализация модели SPMD (SIMD) c помощью PVM-и С++-средств
Реализация модели MPMD (MIMD) с помощью PVM-и С++-средств
Базовые механизмы PVM
Функции управления процессами
Упаковка и отправка сообщений
Доступ к стандартному входному потоку (stdin) и стандартному выходному потоку (stdout) со стороны PVM-задач
Получение доступа к стандартному выходному потоку (cout) из сыновней задачи
Резюме
Обработка ошибок, исключительных ситуаций и надежность программного обеспечения
Надежность программного обеспечения
Отказы в программных и аппаратных компонентах
Определение дефектов в зависимости от спецификаций ПО
Обработка ошибок или обработка исключительных ситуаций?
Надежность ПО: простой план
План А: модель возобновления, план Б: модель завершения
Использование объектов отображения для обработки ошибок
Механизмы обработки исключительных ситуаций в С++
Классы исключений
Классы runtime__error
Классы logic_error
Выведение новых классов исключений
Защита классов исключений от исключительныхситуаций
Диаграммы событий, логические выражения и логические схемы
Резюме
Распределенное объектно-ориентированное программирование
Декомпозиция задачи и инкапсуляция ее решения
Взаимодействие между распределенными объектами
Синхронизация взаимодействия локальных и удаленных объектов
Обработка ошибок и исключений в распределенной среде
Доступ к объектам из других адресных пространств
. IOR-доступ к удаленным объектам
Брокеры объектных запросов (ORB)
Язык описания интерфейсов (IDL):более «пристальный» взгляд на CORBA-объекты
Анатомия базовой CORBA-программы потребителя
Анатомия базовой CORBA-программы изготовителя
Базовый npoeкт CORBA-приложения
IDL-компилятор
Получение IOR-ссылки для удаленных объектов
Служба имен
Использование службы имен и создание именных контекстов
Служба имен «потребитель-клиент»
Подробнее об объектных адаптерах
Хранилища реализаций и интерфейсов
Простые pacnpeделенные Web-службы, использующие CORBA-спецификацию
Маклерская служба
Парадигма «клиент-сервер»
Резюме
Реализация моделей SPMD и MPMD с помощью шаблонов и MPI-программирования
Декомпозиция работ для MPI-интерфейса
Дифференциация задач по рангу
Группирование задач по коммуникаторам
Анатомия MPI-задачи