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

45 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Лабораторная работа №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, так как это связано с тем, что матрицу довольно просто
разделить на подзадачи.