SoftCraft
разноликое программирование

Top.Mail.Ru

Яндекс.Метрика

Практические приемы построения многопоточных приложений


Начальная страница курса

Цели и задачи: Изучить работу с потоками. Научиться разбивать задачу на части, для последующего их выполнения различными потоками.

Общие сведения

Потоки предоставляют возможность проведения параллельных или псевдопараллельных (в случае одного ядра) вычислений. Потоки могут порождаться во время работы программы, процесса или другого потока. Основное отличие потоков от процессов заключается в том, что различные потоки имеют различные пути выполнения, но при этом пользуются общей памятью. Таким образом, несколько порожденных в программе потоков, могут пользоваться глобальными переменными, и любое изменение данных одним потоком, будет доступно и для всех остальных. Существует несколько моделей построения многопоточных приложений. Среди них можно отметить следующие.

Итеративный параллелизм используется для реализации нескольких потоков (часто идентичных), каждый из которых содержит циклы. Потоки программы, описываются итеративными функциями и работают совместно над решением одной задачи.

Рекурсивный параллелизм используется в программах с одной или несколькими рекурсивными процедурами, вызов которых независим. Это технология «разделяй-и-властвуй» или «перебор-с-возвратами».

Производители и потребители – это парадигма взаимодействующих неравноправных потоков. Одни потоки «производят» данные, другие их «потребляют». Часто такие потоки организуются в конвейер, через который проходит информация. Каждый поток конвейера потребляет выход своего предшественника и производит входные данные для своего последователя. Другой распространенный способ организации потоков – древовидная структура или сети слияния, на этом основан, в частности, метод дихотомии.

Клиенты и серверы – еще один способ взаимодействия неравноправных потоков. Клиентский поток запрашивает сервер и ждет ответа. Серверный поток ожидает запроса от клиента, затем действует в соответствии с поступившим запросом.

Управляющий и рабочие – модель организации вычислений, при которой существует поток, координирующий работу всех остальных потоков. Как правило, управляющий поток распределяет данные, собирает и анализирует результаты.

Взаимодействующие равные – модель, в которой исключен не занимающийся непосредственными вычислениями управляющий поток. Распределение работ в таком приложении либо фиксировано заранее, либо динамически определяется во время выполнения. Одним из распространенных способов динамического распределения работ является «портфель задач». Портфель задач, как правило, реализуется с помощью разделяемой переменной, доступ к которой в один момент времени имеет только один процесс.


Порядок выполнения задания

  1. Выбрать модель приложения, наиболее точно отвечающую специфике задачи или применить указанную. Изучить используемую модельпо дополнительным источники информации.
  2. Разработать алгоритм решения задания, с учетом разделения вычислений между несколькими потоками. Избегать ситуаций неуправляемого изменения одних и тех же общих данных несколькими потоками. Если же избежать этого невозможно, необходимо использовать мьютексы и критические секции.
  3. Разработать программу с применением функций библиотеки POSIX Threads или стандартной библиотеки C++ и протестировать ее на нескольких примерах.
  4. Скриншоты должны продемонстрировать выполнение разработанной программы для различных входных наборов данных, демонстрирующих тестовое покрытие. При вводе из файла и выводе в файл вместо скриншотов можно приложить соответствующие входные и выходные файлы.

Дополнительные сведения

  1. Отчет, программа, тестовые наборы, примеры выполнения выкладываются на Гит.
  2. Отчет должен содержать титульный лист с идентификацией студента, номер варианта, описание задачи.
  3. В отчете необходимо подробно описать используемую модель вычислений. Привести источники информации, в которых описана данная модель.
  4. Для удобства ввод-вывод данных можно организовать с использованием файлов.
  5. Допускается использование командной строки для задания имен файлов, размерностей и других скалярных аргументов. При использовании командной строки в отчете необходимо указать ее формат.
  6. Для порождения массивов данных можно использовать генераторы случайных чисел.

Используемые источники информации

  1. Подборка источников информации по архитектурам параллельных вычислительных систем

Варианты заданий

Варианты заданий находятся в документе по данной ссылке


Начальная страница курса