2025-02-27 19:12:43 +04:00

2.5 KiB
Raw Blame History

Лабораторная работа №1.

Разработка многопоточного приложения с использованием Java Concurrency согласно варианту задания:

Вариант 5: Нужно определить максимальный элемент матрицы

Необходимо:

  1. Разработать однопоточный вариант алгоритма и замерить время его работы.
  2. Разработать параллельный вариант алгоритма с использованием ThreadPoolExecutor и замерить время его работы
  3. Разработать параллельный вариант алгоритма с использованием ForkJoinPoll и замерить время его работы.

Запуск лабораторной работы

javac main.java SingleThreaded.java ThreadPool.java ForkJoin.java java main

Используемые технологии

  • java.util.concurrent - библиотека для разработки многопоточных программ

Что делает программа

  1. Генерируем матрицу
  2. Находим максимальный элемент матрицы в однопоточном алгоритме и замеряем время работы алгоритма
  3. То же самое с помощью ThreadPoolExecutor и ForkJoinPool

Тесты

Размерность матрицы 1000*1000
Single-threaded time: 17 ms
ThreadPoolExecutor time: 73 ms
ForkJoinPool time: 36 ms

Размерность матрицы 10000*10000
Single-threaded time: 1639 ms
ThreadPoolExecutor time: 1440 ms
ForkJoinPool time: 464 ms

Вывод

Для небольших задач реализация многопоточности приводит к более худшему результату, так как ее реализация требует дополнительных затрат

Однако при больших задачах эти дополнительные затраты незначительны по сравнению с эффективностью паралельной обработки

При работе с матрицами ForkJoinPool эффективней, чем ThreadedPoolExecutor, так как это связано с тем, что матрицу довольно просто разделить на подзадачи.