Показаны сообщения с ярлыком stream. Показать все сообщения
Показаны сообщения с ярлыком stream. Показать все сообщения

пятница, 11 ноября 2016 г.

Stream API и Fork/Join. Параллельные вычисления. Java 8 [10 min reading]

Stream. Что это?


Определим Stream как свободную последовательность элементов, которая не хранит никаких данных и использует коллекции как ресурс. Соответственно Stream не предоставляет непосредственного доступа к данным, а дает возможность применить к ресурсу данных вычислительные операции, которые могут быть выполнены последовательно либо параллельно. Эти вычисления в свою очередь "ленивые" и будут выполнены только после вызова терминальной операции.

Все вместе(ресурс данных, последовательность агрегирующих операций и терминальная операция) это называется stream pipeline.


Stream и параллельные вычисления


В разрезе данной темы для нас важным моментом является как раз возможность выполнять вычисления параллельно. И это не требует от нас ни единой строчки многопоточного кода. Или parallel(), когда мы работаем с готовым stream'ом или parallelStream(), когда создаем его сами.

Но все же интересно, как это работает.

среда, 9 ноября 2016 г.

Fork/Join Framework. Параллельные вычисления. Java 8 [5 min reading]

1. Fork/Join Framework


Запустить вычисления параллельно в Java 8 можно всего лишь изменением вызова одного метода. Если у вас уже есть Stream объект вы можете вызвать у него parallel(). Если у вы получаете Stream из коллекции, тогда делайте это через parallelStream().

Параллельные вычисления основаны в Java на разбивке задачи на подзадачи, решение каждой из них параллельно в отдельном потоке, последующием объединение результатов. За это отвечает fork/join framework.