Камерон Хьюз - Параллельное и распределенное программирование на С++
- Название:Параллельное и распределенное программирование на С++
- Автор:
- Жанр:
- Издательство:Издательский дом «Вильямс»
- Год:2004
- Город:МоскваСанкт-ПетербургКиев
- ISBN:ISBN 5-8459-0686-5 (рус.)ISBN 0-13-101376-9 (англ.)
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Камерон Хьюз - Параллельное и распределенное программирование на С++ краткое содержание
Эта книга адресована программистам, проектировщикам и разработчикам программных продуктов, а также научным работникам, преподавателям и студентам, которых интересует введение в параллельное и распределенное программирование с использованием языка С++.
Параллельное и распределенное программирование на С++ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Параллельное и распределенное программирование на С++
Эта книга посвящена всем программистам, и « безвредным» хакерам, инженерам-полуночникам и бесчисленным добровольцам, которые без устали и сожаления отдают свой талант, мастерство, опыт и время, чтобы сделать открытые программные продукты реальностью и совершить революцию в Linux. Без их вклада кластерное, MPP-, SMP-и распределенное программирование не было бы столь доступным для всех желающих, каким оно стало в настоящее время.
Введение
В этой книге представлен архитектурный подход к распределенному и параллельному программированию с использованием языка С++. Особое внимание уделяется применению стандартной С++-библиотеки, алгоритмов и контейнерных классов в распределенных и параллельных средах. Кроме того, мы подробно разъясняем методы расширения возможностей языка С++, направленные на решение задач программирования этой категории, с помощью библиотек классов и функций. При этом нас больше всего интересует характер взаимодействия средств С++ с новыми стандартами POSIX и Single UNIX применительно к организации многопоточной обработки. Здесь рассматриваются вопросы объединения С++-программ с программами, написанными на других языках программирования, для поиска «многоязычных» решений проблем распределенного и параллельного программирования, а также некоторые методы организации программного обеспечения, предназначенные для поддержки этого вида программирования.
В книге показано, как преодолеть основные трудности параллелизма, и описано, что понимается под производным распараллеливанием. Мы сознательно уделяем внимание не методам оптимизации, аппаратным характеристикам или производительности, а способам структуризации компьютерных программ и программных систем ради получения преимуществ от параллелизма. Более того, мы не пытаемся применить методы параллельного программирования к сложным научным и математическим алгоритмам, а хотим познакомить читателя с мультипарадигматическим подходом к решению некоторых проблем, которые присущи распределенному и параллельному программированию. Чтобы эффективно решать эти задачи, необходимо сочетать различные программные и инженерные подходы. Например, методы объектно-ориентированного программирования используются для решения проблем «гонки» данных и синхронизации их обработки. При многозадачном и многопоточном управлении мы считаем наиболее перспективной агентно-ориентированную архитектуру. А для минимизации затрат на обеспечение связей между объектами мы привлекаем методологию «классной доски» (стратегия решения сложных системных задач с использованием разнородных источников знаний, взаимодействующих через общее информационное поле). Помимо объектно-ориентированного, агентно-ориентированного и AI-ориентированного (AI — сокр. от artificial intelligence — искусственный интеллект) программирования, мы используем параметризованное (настраиваемое) программирование для реализации обобщенных алгоритмов, которые применяются именно там, где нужен параллелизм. Опыт разработки программного обеспечения всевозможных форм и объемов позволил нам убедиться в том, что для успешного проектирования программных средств и эффективной их реализации без разносторонности (универсальности) применяемых средств уже не обойтись. Предложения, идеи и решения, представленные в этой книге, отражают практические результаты нашей работы.
Этапы большого пути
При написании параллельных или распределенных программ, как правило, необходимо «пройти» следующие три основных этапа.
1. Идентификация естественного параллелизма, который существует в контексте предметной области.
2. Разбиение задачи, стоящей перед программным обеспечением, на несколько подзадач, которые можно выполнять одновременно, чтобы достичь требуемого уровня параллелизма.
3. Координация этих задач, позволяющая обеспечить корректную и эффективную работу программных средств в соответствии с их назначением.
Эти три этапа достигаются при условии параллельного решения следующих проблем:
• «гонка» данных
• обнаружение взаимоблокировки
• частичный отказ
• бесконечное ожидание
• взаимоблокировка
• отказ средств коммуникации
• регистрация завершения работы
• отсутствие глобального состояния
• проблема многофазной синхронизации
• несоответствие протоколов
• локализация ошибок
• отсутствие средств централизованного
• распределения ресурсов
В этой книге разъясняются все названные проблемы, причины их возникновения и возможные пути решения.
Наконец, в некоторых механизмах, выбранных нами для обеспечения параллелизма, в качестве протокола используется TCP/IP (Transmission Control Protocol/Internet Protocol— протокол управления передачей/протокол Internet). В частности, имеются в виду следующие механизмы: библиотека MPI (Message Passing Interface — интерфейс для передачи сообщений), библиотека PVM (Parallel Virtual Machine — параллельная виртуальная машина) и библиотека MICO (или CORBA — Common Object Request Broker Architecture — технология построения распределенных объектных приложений). Эти механизмы позволяют использовать наши подходы в среде Internet/Intranet, а это значит, что программы, работающие параллельно, могут выполняться на различных сайтах Internet (или корпоративной сети intranet) и общаться между собой посредством передачи сообщений. Многие эти идеи служат в качестве основы для построения инфраструктуры Web-служб. В дополнение к MPI- и PVM-процедурам, используемые нами CORBA-объекты, размещенные на различных серверах, могут взаимодействовать друг с другом через Internet. Эти компоненты можно использовать для обеспечения различных Internet/Intranet-служб.
Подход
При решении проблем, которые встречаются при написании параллельных или распределенных программ, мы придерживаемся компонентного подхода. Наша главная цель — использовать в качестве строительных блоков параллелизма каркасные классы. Каркасные классы поддерживаются объектно-ориентированными мьютексами, семафорами, конвейерами и сокетами. С помощью интерфейсных классов удается значительно снизить сложность синхронизации задач и их взаимодействия. Для того чтобы упростить управление потоками и процессами, мы используем агентно-ориентированные потоки и процессы. Наш основной подход к глобальному состоянию и связанные с ним проблемы включают применение методологии «классной доски». Для получения мультипарадигматических решений мы сочетаем агентно-ориентированные и объектно-ориентированные архитектуры. Такой мультипарадигматический подход обеспечивают средства, которыми обладает язык С++ для объектно-ориентированного, параметризованного и структурного программирования.
Читать дальшеИнтервал:
Закладка: