forked from sevastyan_b/SSPR_25
58 lines
3.5 KiB
Markdown
58 lines
3.5 KiB
Markdown
# Лабораторная работа №1. Вариант 16.
|
||
**Упорядочить столбцы матрицы по возрастанию суммы их элементов.**
|
||
|
||
Для работы используем:
|
||
1) Однопоточный алгоритм.
|
||
2) Многопоточный алгоритм с использованием ThreadPoolExecutor.
|
||
3) Многопоточный алгоритм с использованием ForkJoinPool.
|
||
|
||
|
||
## Как запустить лабораторную работу
|
||
|
||
Сначала компилируем наш код коммандой: javac Main.java
|
||
Затем запускаем: java Main
|
||
|
||
## Технологии
|
||
|
||
Стандартные библиотеки Java: java.util.concurrent для работы с многопоточностью.
|
||
ThreadPoolExecutor: Используется для управления пулом потоков, тут каждый поток вычисляет сумму для отдельного столбца.
|
||
ForkJoinPool: Используется для рекурсивного разбиения задачи: делим матрицу пополам рекурсивно, и каждый поток работает с несколькими столбцами.
|
||
|
||
## Что программа делает
|
||
|
||
Задача — упорядочить столбцы матрицы по возрастанию суммы их элементов.
|
||
Посмотрим поэтапно:
|
||
1) Генерируем матрицу случайным образом в зависимости от указанной размерности, диапазон значений может быть от 0 до 99.
|
||
2) Записываем в файл input_matrix.txt.
|
||
3) Далее используем сначала однопоточный алгоритм: Суммы столбцов вычисляются последовательно, и только потом столбцы сортируются по этим суммам.
|
||
4) Теперь посмотрим как работает многопоточный алгоритм с ThreadPoolExecutor: Суммы столбцов вычисляются параллельно с использованием пула потоков, потом столбцы сортируются.
|
||
5) Многопоточный алгоритм с ForkJoinPool: Суммы столбцов вычисляются параллельно с использованием ForkJoinPool, который разбивает задачу на подзадачи.
|
||
6) Время выполнения каждого алгоритма замеряется и выводится в консоль.
|
||
7) Отсортированная матрица записывается в файлы: output_single_thread.txt, output_thread_pool.txt и output_fork_join.txt для каждого из алгоритмов.
|
||
Хотя результат работы сортировки и будет одинаковым, итоги всё равно запишем в отдельные файлы.
|
||
|
||
## Примеры входных и выходных значений
|
||
|
||
Input lines: 1000
|
||
Input columns: 1000
|
||
One thread: 611 mc
|
||
ThreadPoolExecutor: 128 mc
|
||
ForkJoinPool: 76 mc
|
||
|
||
Input lines: 500
|
||
Input columns: 500
|
||
One thread: 305 mc
|
||
ThreadPoolExecutor: 116 mc
|
||
ForkJoinPool: 15 mc
|
||
|
||
Input lines: 100
|
||
Input columns: 100
|
||
One thread: 489 mc
|
||
ThreadPoolExecutor: 91 mc
|
||
ForkJoinPool: 30 mc
|
||
|
||
Input lines: 10
|
||
Input columns: 10
|
||
One thread: 186 mc
|
||
ThreadPoolExecutor: 20 mc
|
||
ForkJoinPool: 4 mc |