
- •Цель работы
- •Введение
- •1. Многопоточное программирование: средства и реализация
- •1.1 Понятие процесса и нити
- •1.2 Многопоточное программирование.
- •1.3 Изменение парадигмы – проблемы координации
- •Проблема №1: "гонка" данных
- •Проблема №2: бесконечная отсрочка
- •Проблема №3: взаимоблокировка
- •2. Отладка параллельных программ
Многопоточное параллельное программирование
Цель работы
Освоение методов и средств построения и реализации многопоточных программ.
Введение
В настоящее время существуют различные языковые средства представления и реализации параллельных программ, начиная от низкоуровневых примитивов ОС, специальных библиотек (MPI, PVM и др.), предназначенных для описания и реализации взаимодействующих параллельных процессов и заканчивая системами параллельного программирования, основанными на высокоуровневых языках представления параллельных программ. Примерами последних являются системы функционального параллельного программирования [1, 2], граф-схемного параллельного программирования [3], логического и объектно-ориентированного параллельного программирования и др.
Однако, какая бы парадигма не использовалась для представления параллельных программ, её выполнение сводится к управлению порождающими процессами и взаимодействиями между ними.
По сути, это использование механизмов организации многокомпонентной параллельной работы вычислительных машин и систем для описания параллельных программ и процессов.
Средства описания параллельных процессов, используемые в MPI и PVM, к примеру, ориентированы в большей степени на вычислительные системы с распределенной памятью. Многопоточное параллельное программирование напротив, пытается воспользоваться возможностями более простой организации взаимодействия между процессами, протекающими с использованием общей памяти и разделяемых переменных.
Интуитивно, потоки – это в некотором смысле последовательность самостоятельных действий (обращений к тем или иным устройствам, независимым вычислениям и др.), взаимодействующих при выполнении программы или, точнее, в рамках процесса ОС, однозначно связанного с выполнением программы. Потоки – это более простые (почему их иногда называют легковесными) процессы по сравнению с понятием процесса, которым оперируют ОС.
Многопоточное параллельное программирование появилось как реакция на необходимость эффективного использования многопроцессорных вычислительных систем с общей памятью. К примеру, фирма Intel активно внедряет технологии многопоточного параллельного программирования в связи с выпуском ею многопроцессорных ВС. Отметим, что несмотря на простоту, как самой идеи многопоточного параллельного программирования, так и её реализацию, многопоточное параллельное программирование требует повышенных усилий от программиста, касающихся обеспечения корректности параллельной программы (однозначности результата её выполнения независимо от временных характеристик индуцируемых потоков и использования общих переменных), её эффективности (частое "столкновение" потоков при обращении к общим программным и аппаратным ресурсам).