2.5 KiB
Лабораторная работа №1.
Разработка многопоточного приложения с использованием Java Concurrency согласно варианту задания:
Вариант 5: Нужно определить максимальный элемент матрицы
Необходимо:
- Разработать однопоточный вариант алгоритма и замерить время его работы.
- Разработать параллельный вариант алгоритма с использованием ThreadPoolExecutor и замерить время его работы
- Разработать параллельный вариант алгоритма с использованием ForkJoinPoll и замерить время его работы.
Запуск лабораторной работы
javac main.java SingleThreaded.java ThreadPool.java ForkJoin.java java main
Используемые технологии
- java.util.concurrent - библиотека для разработки многопоточных программ
Что делает программа
- Генерируем матрицу
- Находим максимальный элемент матрицы в однопоточном алгоритме и замеряем время работы алгоритма
- То же самое с помощью 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, так как это связано с тем, что матрицу довольно просто разделить на подзадачи.