Содержание
- Параллельное исполнение
- Развитие параллельных систем
- Потоки и процессы
- Типы параллелизма
- Итеративный
- Рекурсивный
- Обмен сообщениями
- Неделимые операции
- Безусловные
- Условные
- Свойства планировщика
- Потоки
- Создание потоков
- Состояния и свойства потоков
- Завершение потоков
- Механизм прерывания
Домашнее задание 8. Итеративный параллелизм
-
Реализуйте класс
IterativeParallelism
,
который будет обрабатывать списки в несколько потоков.
-
В простом варианте должны быть реализованы следующие методы:
argMax(threads, list, comparator)
—
индекс первого максимума;
argMin(threads, list, comparator)
—
индекс первого минимума;
indexOf(threads, list, predicate)
—
индекс первого элемента, удовлетворяющего предикат;
lastIndexOf(threads, list, predicate)
—
индекс последнего элемента, удовлетворяющего предикат;
sumIndices(threads, list, predicate)
—
сумма индексов элементов, удовлетворяющих предикат;
-
В сложном варианте должны быть дополнительно реализованы следующие методы:
indices(threads, list, predicate)
—
индексы элементов, удовлетворяющих предикат;
filter(threads, list, predicate)
—
вернуть список, содержащий элементы удовлетворяющие предикату;
map(threads, list, function)
—
вернуть список, содержащий результаты применения функции;
-
Во все функции передается параметр
threads
—
сколько потоков надо использовать при вычислении.
Вы можете рассчитывать, что число потоков относительно мало.
-
Не следует рассчитывать на то, что переданные компараторы,
предикаты и функции работают быстро.
-
Можно сделать O(
threads
), но не O(list.size()
)
действий без распараллеливания.
-
При выполнении задания нельзя использовать
Concurrency Utilities и Parallel Streams.