Разработка структур данных с диiиплиной доступа один пишет - много читают для многопоточного взаимодействия в системах реального времени

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?тения для методов неблокирующего подсчёта ссылок и опасных указателей.

Также необходимо отметить, что все потоки должны запускаться одновременно, а также одновременно завершаться, так как измеряемое время будет зависеть от числа одновременно работающих потоков. Сравнение будет проводиться для метода неблокирующего подсчёта ссылок и метода опасных указателей для известного числа потоков, так как операции записи и чтения идентичны. Было решено рассмотреть один, три, пять и семь потоков читающих потоков, причём взаимодействующие также с массивом единичной длины для увеличения нагрузки. При построении графиков использовалось среднее и максимальное время выполнения одной операции чтения. Было выполнено по десять запусков для каждого варианта. Пример запуска представлен на рис. 3.3, результат - в листингах 3.5 и 3.6. Итоговые результаты представлены в таблице 3.3 и на рис. 3.4.

Рис. 3.3 Пример запуска программы сравнения методов

Листинг 3.5 Результат запуска программы сравнения методов для одного потока для операции чтения

HP known threadstime = 38249797, Average time for one operation = 38.time = 49071218, Average time for one operation = 49.time = 38288713, Average time for one operation = 38.time = 51675186, Average time for one operation = 51.time = 56317473, Average time for one operation = 56.time = 54771751, Average time for one operation = 54.time = 55610155, Average time for one operation = 55.time = 38313292, Average time for one operation = 38.time = 38396244, Average time for one operation = 38.time = 56585107, Average time for one operation = 56.known threads end

----------------------------------------time = 72600128, Average time for one operation = 72.time = 69639428, Average time for one operation = 69.time = 54617452, Average time for one operation = 54.time = 52445999, Average time for one operation = 52.time = 72555067, Average time for one operation = 72.time = 51173714, Average time for one operation = 51.time = 66033198, Average time for one operation = 66.time = 63014806, Average time for one operation = 63.time = 52515639, Average time for one operation = 52.time = 63127458, Average time for one operation = 63.

LC end

Листинг 3.6 Результат запуска программы сравнения методов для одного потока для операции записи

HP known threadstime = 350980157, Average time for one operation = 350.time = 382210881, Average time for one operation = 382.time = 533933688, Average time for one operation = 533.time = 316099509, Average time for one operation = 316.time = 359319991, Average time for one operation = 359.time = 335807808, Average time for one operation = 335.time = 333108598, Average time for one operation = 333.time = 537831790, Average time for one operation = 537.time = 521164753, Average time for one operation = 521.time = 339570386, Average time for one operation = 339.known threads end

----------------------------------------time = 324355195, Average time for one operation = 324.time = 316458288, Average time for one operation = 316.time = 514269426, Average time for one operation = 514.time = 512787881, Average time for one operation = 512.time = 332048303, Average time for one operation = 332.time = 515198293, Average time for one operation = 515.time = 318821933, Average time for one operation = 318.time = 315950672, Average time for one operation = 315.time = 511196074, Average time for one operation = 511.time = 300171538, Average time for one operation = 300. end

Таблица 3.3 Результаты сравнения структур по временным характеристикам

Миллион операцийОдна операцияПотоки макс, nsсред, nsмакс, nsсред, nsЧтение HP*5658510747727894564717762850454897512775431062892255580585210655515640691260533960156607LC**726001286177228972611343743972215129017343215356095446929332645356029356836424153380683446833387Запись5378317903985642585373981794820055655848363794655316086318758660633241608865519515848941252959897195112527HP* - метод опасных указателей; LC** - метод неблокирующего подсчёта ссылок.

Рис. 3.4 График зависимости времени выполнения одной операции чтения от количества читающих потоков

Полученные результаты показывают, что метод опасных указателей обладает большей производительностью, что особенно заметно при увеличении количества потоков.

Заключение

В рамках дипломного проектирования успешно решена задача разработки структур данных с диiиплиной доступа один пишет - много читают для многопоточного взаимодействия в системах реального времени.

Были проанализированы возможные методы решения поставленной задачи. По результатам анализа выбор пал на алгоритмы неблокирующей синхронизации, как наиболее подходящие для решения поставленной задачи. В соответствии с одним из принципов неблокирующей синхронизации появилась необходимость в специальном методе освобождения памяти. Наиболее удовлетворяющими поставленной задаче оказались два метода: неблокирующего подсчёта ссылок и опасных указателей. В связи с этим было принято решение реализовать оба.

Далее были уточнены требования к разрабатываемым структурам, в соответствии с поставленной задачей, с учётом выбранных методов реализации и проведён обзор существующих структур. В результате обзора подходящих структур не было найдено, поэтому было принято решение разрабатывать структуры с нуля на основе выбранных методов и средств.

Были разработаны структуры данных и алгоритмы взаимодействия структуры и внешней программы в соответствии со всеми принципами неблокирующей синхронизации, в том числе и с выбранными специальными методами освобождения памяти. Далее разработанные структуры и алгоритмы были объединены в классы и реализованы на языке программирования C++ в среде Microsoft Visual Studio в ОС Windows. Суммарный объём кода разработанных классов без учёта комментариев составил около тысячи строк. Тестирование алгоритмов производилось изолировано по мере разработки структуры.

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