SSPR_25/neshina_anastasiia_lab_1

Лабораторная работа №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