SSPR_25/pokladov_nikita_lab_1
никита покладов 2c635b4cf1 pokladov_nikita_lab_1 is ready
2025-02-23 21:36:57 +04:00
..
2025-02-23 21:36:57 +04:00

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

Как запустить лабораторную работу: javac MatrixSorter.java java MatrixSorter

Используемые технологии Java Concurrency: Используются такие классы и интерфейсы, как ExecutorService, ThreadPoolExecutor, ForkJoinPool, Future, CompletableFuture, RecursiveAction для реализации многопоточности.

Что делает программа

  1. Программа генерирует матрицу заданного размера, заполненную случайными значениями.
  2. Для каждой строки матрицы вычисляется сумма её элементов.
  3. Строки матрицы сортируются по убыванию суммы их элементов. Используются три подхода:
  4. Программа замеряет время выполнения каждого из подходов и выводит среднее время выполнения для каждого сочетания алгоритмов.

Результат работы программы, по которому можно понять в каких ситуациях какой алгоритм лучше использовать:

Matrix size: 10 x 1000000 Summation: Single | Sorting: Single -> Average Time: 9 ms Summation: Single | Sorting: ThreadPool -> Average Time: 11 ms Summation: Single | Sorting: ForkJoin -> Average Time: 9 ms Summation: ThreadPool | Sorting: Single -> Average Time: 19 ms Summation: ThreadPool | Sorting: ThreadPool -> Average Time: 6 ms Summation: ThreadPool | Sorting: ForkJoin -> Average Time: 7 ms Summation: ForkJoin | Sorting: Single -> Average Time: 9 ms Summation: ForkJoin | Sorting: ThreadPool -> Average Time: 7 ms Summation: ForkJoin | Sorting: ForkJoin -> Average Time: 8 ms

Matrix size: 100 x 100000 Summation: Single | Sorting: Single -> Average Time: 7 ms Summation: Single | Sorting: ThreadPool -> Average Time: 7 ms Summation: Single | Sorting: ForkJoin -> Average Time: 7 ms Summation: ThreadPool | Sorting: Single -> Average Time: 7 ms Summation: ThreadPool | Sorting: ThreadPool -> Average Time: 7 ms Summation: ThreadPool | Sorting: ForkJoin -> Average Time: 6 ms Summation: ForkJoin | Sorting: Single -> Average Time: 7 ms Summation: ForkJoin | Sorting: ThreadPool -> Average Time: 7 ms Summation: ForkJoin | Sorting: ForkJoin -> Average Time: 8 ms

Matrix size: 1000 x 10000 Summation: Single | Sorting: Single -> Average Time: 7 ms Summation: Single | Sorting: ThreadPool -> Average Time: 12 ms Summation: Single | Sorting: ForkJoin -> Average Time: 10 ms Summation: ThreadPool | Sorting: Single -> Average Time: 10 ms Summation: ThreadPool | Sorting: ThreadPool -> Average Time: 9 ms Summation: ThreadPool | Sorting: ForkJoin -> Average Time: 9 ms Summation: ForkJoin | Sorting: Single -> Average Time: 7 ms Summation: ForkJoin | Sorting: ThreadPool -> Average Time: 9 ms Summation: ForkJoin | Sorting: ForkJoin -> Average Time: 7 ms

Matrix size: 10000 x 1000 Summation: Single | Sorting: Single -> Average Time: 11 ms Summation: Single | Sorting: ThreadPool -> Average Time: 17 ms Summation: Single | Sorting: ForkJoin -> Average Time: 13 ms Summation: ThreadPool | Sorting: Single -> Average Time: 26 ms Summation: ThreadPool | Sorting: ThreadPool -> Average Time: 19 ms Summation: ThreadPool | Sorting: ForkJoin -> Average Time: 23 ms Summation: ForkJoin | Sorting: Single -> Average Time: 8 ms Summation: ForkJoin | Sorting: ThreadPool -> Average Time: 7 ms Summation: ForkJoin | Sorting: ForkJoin -> Average Time: 7 ms

Matrix size: 100000 x 100 Summation: Single | Sorting: Single -> Average Time: 72 ms Summation: Single | Sorting: ThreadPool -> Average Time: 69 ms Summation: Single | Sorting: ForkJoin -> Average Time: 47 ms Summation: ThreadPool | Sorting: Single -> Average Time: 146 ms Summation: ThreadPool | Sorting: ThreadPool -> Average Time: 127 ms Summation: ThreadPool | Sorting: ForkJoin -> Average Time: 109 ms Summation: ForkJoin | Sorting: Single -> Average Time: 74 ms Summation: ForkJoin | Sorting: ThreadPool -> Average Time: 59 ms Summation: ForkJoin | Sorting: ForkJoin -> Average Time: 47 ms

Matrix size: 1000000 x 10 Summation: Single | Sorting: Single -> Average Time: 2088 ms Summation: Single | Sorting: ThreadPool -> Average Time: 1305 ms Summation: Single | Sorting: ForkJoin -> Average Time: 1203 ms Summation: ThreadPool | Sorting: Single -> Average Time: 5506 ms Summation: ThreadPool | Sorting: ThreadPool -> Average Time: 4021 ms Summation: ThreadPool | Sorting: ForkJoin -> Average Time: 4943 ms Summation: ForkJoin | Sorting: Single -> Average Time: 2497 ms Summation: ForkJoin | Sorting: ThreadPool -> Average Time: 1739 ms Summation: ForkJoin | Sorting: ForkJoin -> Average Time: 1435 ms