
- •Национальный исследовательский ядерный университет «мифи»
- •Пояснительная записка к дипломному проекту на тему:
- •Глава 1. Обзор методов и средств многопоточного взаимодействия 7
- •Глава 2. Разработка структуры и алгоритмов взаимодействия 29
- •Глава 3. Реализация и тестирование разработанных структур и алгоритмов взаимодействия 53
- •Введение
- •Глава 1. Обзор методов и средств многопоточного взаимодействия
- •1.1. Блокирующая синхронизация
- •1.2. Неблокирующая синхронизация
- •1.2.1. Общие сведения
- •1.2.2. Принципы неблокирующих алгоритмов Узлы неизменяемого типа
- •Подмена указателей
- •Атомарные операции
- •Специальные методы управления памятью
- •1.2.3. Обзор специальных методов управления памятью Метод использования специальных тегов
- •Метод неблокирующего подсчета ссылок
- •Метод опасных указателей
- •1.2.4. Оценка эффективности методов
- •1.2.5. Типы алгоритмов для неблокирующей синхронизации
- •1.3. Выводы
- •Глава 2. Разработка структуры и алгоритмов взаимодействия
- •2.1. Требования к разрабатываемой структуре данных и обоснование выбранных методов реализации
- •2.2. Обзор существующих неблокирующих структур
- •2.3. Разработка структуры данных
- •2.4. Разработка алгоритмов
- •2.4.1. Алгоритм записи
- •2.4.2. Алгоритм чтения
- •Метод неблокирующего подсчёта ссылок
- •Метод опасных указателей
- •2.4.3. Алгоритм освобождения памяти
- •Метод неблокирующего подсчёта ссылок
- •Метод опасных указателей
- •2.4.4. Алгоритм добавления и удаления опасных указателей
- •Глава 3. Реализация и тестирование разработанных структур и алгоритмов взаимодействия
- •3.1. Особенности программной реализации
- •3.2. Тестирование разработанных алгоритмов
- •3.3. Тестирование разработанной структуры при многопоточном доступе
- •3.4. Сравнение структур по временным характеристикам
- •Заключение
- •Список литературы
3.4. Сравнение структур по временным характеристикам
Для систем реального времени важным фактором является не только правильность выполнения операций, но и время их выполнения, причём, если для систем мягкого реального времени важно среднее время выполнения операций, то для систем жёсткого реального времени – максимальное время выполнения операций. Таким образом, необходимо провести измерения времени выполнения операций чтения и записи для разработанных структур и построить графики зависимости времени выполнения операция от числа потоков. Для этого программа тестирования была изменена с учётом следующих требований:
Запуск методов неблокирующего подсчёта ссылок и опасных указателей поочерёдно.
Измерение времени выполнения операций записи и чтения.
Задание произвольного числа операций, время выполнения которых измеряется.
Запись в файл результатов измерения операций записи и чтения для методов неблокирующего подсчёта ссылок и опасных указателей.
Также необходимо отметить, что все потоки должны запускаться одновременно, а также одновременно завершаться, так как измеряемое время будет зависеть от числа одновременно работающих потоков. Сравнение будет проводиться для метода неблокирующего подсчёта ссылок и метода опасных указателей для известного числа потоков, так как операции записи и чтения идентичны. Было решено рассмотреть один, три, пять и семь потоков читающих потоков, причём взаимодействующие также с массивом единичной длины для увеличения нагрузки. При построении графиков использовалось среднее и максимальное время выполнения одной операции чтения. Было выполнено по десять запусков для каждого варианта. Пример запуска представлен на рис. 3.3, результат – в листингах 3.5 и 3.6. Итоговые результаты представлены в таблице 3.3 и на рис. 3.4.
Рис. 3.3. Пример запуска программы сравнения методов
Листинг 3.5. Результат запуска программы сравнения методов для одного потока для операции чтения
HP known threads
All time = 38249797, Average time for one operation = 38.
All time = 49071218, Average time for one operation = 49.
All time = 38288713, Average time for one operation = 38.
All time = 51675186, Average time for one operation = 51.
All time = 56317473, Average time for one operation = 56.
All time = 54771751, Average time for one operation = 54.
All time = 55610155, Average time for one operation = 55.
All time = 38313292, Average time for one operation = 38.
All time = 38396244, Average time for one operation = 38.
All time = 56585107, Average time for one operation = 56.
HP known threads end
-----------------------------------------
LC
All time = 72600128, Average time for one operation = 72.
All time = 69639428, Average time for one operation = 69.
All time = 54617452, Average time for one operation = 54.
All time = 52445999, Average time for one operation = 52.
All time = 72555067, Average time for one operation = 72.
All time = 51173714, Average time for one operation = 51.
All time = 66033198, Average time for one operation = 66.
All time = 63014806, Average time for one operation = 63.
All time = 52515639, Average time for one operation = 52.
All time = 63127458, Average time for one operation = 63.
LC end
Листинг 3.6. Результат запуска программы сравнения методов для одного потока для операции записи
HP known threads
All time = 350980157, Average time for one operation = 350.
All time = 382210881, Average time for one operation = 382.
All time = 533933688, Average time for one operation = 533.
All time = 316099509, Average time for one operation = 316.
All time = 359319991, Average time for one operation = 359.
All time = 335807808, Average time for one operation = 335.
All time = 333108598, Average time for one operation = 333.
All time = 537831790, Average time for one operation = 537.
All time = 521164753, Average time for one operation = 521.
All time = 339570386, Average time for one operation = 339.
HP known threads end
-----------------------------------------
LC
All time = 324355195, Average time for one operation = 324.
All time = 316458288, Average time for one operation = 316.
All time = 514269426, Average time for one operation = 514.
All time = 512787881, Average time for one operation = 512.
All time = 332048303, Average time for one operation = 332.
All time = 515198293, Average time for one operation = 515.
All time = 318821933, Average time for one operation = 318.
All time = 315950672, Average time for one operation = 315.
All time = 511196074, Average time for one operation = 511.
All time = 300171538, Average time for one operation = 300.
LC end
Таблица 3.3
Результаты сравнения структур по временным характеристикам
|
|
Миллион операций |
Одна операция |
Потоки |
|||
|
|
макс, ns |
сред, ns |
макс, ns |
сред, ns |
||
Чтение |
HP* |
56585107 |
47727894 |
56 |
47 |
1 |
|
77628504 |
54897512 |
77 |
54 |
3 |
|||
106289225 |
55805852 |
106 |
55 |
5 |
|||
156406912 |
60533960 |
156 |
60 |
7 |
|||
LC** |
72600128 |
61772289 |
72 |
61 |
1 |
||
343743972 |
215129017 |
343 |
215 |
3 |
|||
560954469 |
293326453 |
560 |
293 |
5 |
|||
683642415 |
338068344 |
683 |
338 |
7 |
|||
Запись |
537831790 |
398564258 |
537 |
398 |
1 |
||
794820055 |
655848363 |
794 |
655 |
3 |
|||
1608631875 |
866063324 |
1608 |
865 |
5 |
|||
1951584894 |
1252959897 |
1951 |
1252 |
7 |
HP* – метод опасных указателей; LC** – метод неблокирующего подсчёта ссылок.
Рис. 3.4. График зависимости времени выполнения одной операции
чтения от количества читающих потоков
Полученные результаты показывают, что метод опасных указателей обладает большей производительностью, что особенно заметно при увеличении количества потоков.