Лабораторная работа №1
Разработка многопоточного приложения с использованием Java Concurrency согласно варианту задания. Необходимо:
- Разработать однопоточный вариант алгоритма и замерить время его работы.
- Разработать параллельный вариант алгоритма с использованием ThreadPoolExecutor и замерить время его работы
- Разработать параллельный вариант алгоритма с использованием ForkJoinPoll и замерить время его работы. Массив генерируется до работы всех вариантов алгоритмов. Все три алгоритма обрабатывают три одинаковых массива.
Вариант 3
Разделить элементы матрицы на среднее арифметическое всех ее элементов.
Как запустить лабораторную работу:
javac Main.java компилирует исходный код java Main команда запускает скомпилированный класс
Какие технологии использовали:
java.util.concurrent используется для работы с многопоточностью и параллельными алгоритмами.
- ExecutorService и Executors используются для управления пулами потоков и выполнения задач.
- TimeUnit помогает работать с временными интервалами.
- ForkJoinPool, RecursiveAction и RecursiveTask используются для параллельного выполнения задач, которые можно разбить на более мелкие подзадачи.
Как работает программа:
- Генерируем матрицу размером 1000*1000
- Создаем три копии исходной матрицы
- Класс SingleThreadedMatrixProcessor обрабатывает матрицу в одном потоке
- Класс ThreadPoolMatrixProcessor обрабатывает матрицу с использованием пула потоков: создается пул потоков, каждая строка матрицы обрабатывается в отдельном потоке
- Класс ForkJoinMatrixProcessor обрабатывает матрицу с использованием ForkJoinPool и рекурсивного разделения задачи: если блок большой, он разделяется на две части, и каждая часть обрабатывается рекурсивно
- Выводятся результаты времени выполнения для каждого из трех подходов.
Тесты:
Single-threaded: 0.015592711 сек ThreadPoolExecutor: 0.024355768 сек ForkJoinPool: 0.01131473 сек
Вывод:
ForkJoinPool — самый быстрый. Однопоточный алгоритм — быстрее, чем ThreadPoolExecutor, но медленнее, чем ForkJoinPool. ThreadPoolExecutor — самый медленный в данном случае.