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

Производительность параллельных вычислений. Java 8 [5 min reading]


Benchmark


В предыдущих двух постах мы разобрались с тем, как устроен data parallelism в Stream API. Теперь можем двигаться к самому важному - что все это нам дает. Вроде бы все очевидно - чем больше ядер - тем больше задач мы можем выполнить параллельно - тем быстрее мы получаем результат. Но давайте по порядку.

пятница, 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.

понедельник, 7 ноября 2016 г.

Знакомство с Optional монадой в Java 8

Когда я слышал слово "монада", то представлял себе экзотические языки программирования как Haskell, Scala. После встретил, очередной раз погружаясь в изучение Javascript. Ну а как же Java?

Теперь и в Java можно найти монаду, приложив усилие.