58 lines
3.5 KiB
Markdown
Raw Normal View History

2025-02-25 21:00:17 +04:00
# Лабораторная работа №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