Содержание
- Параллельное исполнение
- Развитие параллельных систем
- Потоки и процессы
- Типы параллелизма
- Итеративный
- Рекурсивный
- Обмен сообщениями
- Неделимые операции
- Безусловные
- Условные
- Свойства планировщика
- Потоки
- Создание потоков
- Состояния и свойства потоков
- Завершение потоков
- Механизм прерывания
Домашнее задание 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.