94 lines
6.0 KiB
Markdown
Raw Normal View History

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