forked from sevastyan_b/SSPR_25
45 lines
2.5 KiB
Markdown
45 lines
2.5 KiB
Markdown
## Лабораторная работа №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, так как это связано с тем, что матрицу довольно просто
|
||
разделить на подзадачи.
|