forked from sevastyan_b/SSPR_25
94 lines
6.0 KiB
Markdown
94 lines
6.0 KiB
Markdown
|
Данная программа разработана для сравнения производительности однопоточного и многопоточного подходов к сортировке строк матрицы по убыванию суммы их элементов. Задача состоит из двух основных частей:
|
||
|
Подсчёт сумм строк: Для каждой строки матрицы вычисляется сумма её элементов.
|
||
|
Сортировка строк: Строки матрицы сортируются по убыванию суммы их элементов.
|
||
|
Эти этапы показывают разные затраты времени при различных соотношениях матрицы.
|
||
|
Для того, чтобы замеры были адеватными, было принято решение замерить время выполнения различных комбинаций при различных соотношениях сторон матрицы.
|
||
|
|
||
|
|
||
|
|
||
|
Как запустить лабораторную работу:
|
||
|
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
|