Pull to refresh

Comments 10

А можете дать примеры в каком случае нужна ручная работа с Fork/Join пулами, а в каком случае вполне хватит Stream Api? Учитывая что Stream Api во много лучше ручной работы с Fork/Join пулами и можно даже задавать свой собственный пул для долгий запросов. Так все-таки когда описанное в статье может реально быть необходимым по сравнению с Stream Api? Заранее спасибо
Сейчас в Fork/Join можно с Pool обходится как угодно. Создавать самому и/или будет использован общий ForkJoinPool.
Я определил для себя использование Fork/join как некий каркас в некоторых задачах, который отвечает за уровень параллелизма(в зависимости от нагрузки на процессоры, количества обрабатываемой информации и т.п.).
Stream Api использую для фильтрации и/или нахождения определенных элементов.
Завтра смогу изучить ссылку, которую вы указали, и напишу по этому поводу. Спасибо.
Касательно вашей ссылки. Внимательно изучил материал и вот, что мне кажется в переписке. Курсивом буду выделять материал из ссылки.
«Is it possible to specify a custom thread pool for Java 8 parallel stream? I can not find it anywhere.» — вопрос по созданию пула.
Далее приводится пример, где в раздельных потоках происходит запуск, ну и соответственно описывают проблему.
Далее нам пишут о том, что мы можем создать свой собственный пул и фактически работать с ним. Вот эта часть: «What do you mean by custom thread pool? There is a single common ForkJoinPool but you can always create your own ForkJoinPool and submit requests to it».
Вот тут выскажу свое мнение.
Я определил, что сейчас есть возможность использовать 3 варианта
а) создавать свой
б) поставить по умолчанию (будет зависеть от количества процессоров)
в) или будет использоваться общий пул(с jdk8)
дополнительно можно настроить уровни параллелизма(однозначно их не стоит ставить более количества процессоров, я бы сказал ядер)
Вернемся к Вашей ссылке.
далее приводится ссылка на проблему с lock-ами(нужно исследовать).
Далее еще ответы:
«There actually is a trick how to execute a parallel operation in a specific fork-join pool. If you execute it as a task in a fork-join pool, it stays there and does not use the common one.» и далее пример по созданию
Далее просят link на то, что «But is it also specified that streams use the ForkJoinPool».
Смотрим ссылку и в ней находим следующее:
But it is mentioned in the ForkJoin documentation at the bottom of docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
Читаем вот эту часть(документация):
Besides using the fork/join framework to implement custom algorithms for tasks to be performed concurrently on a multiprocessor system (such as the ForkBlur.java example in the previous section), there are some generally useful features in Java SE which are already implemented using the fork/join framework. One such implementation, introduced in Java SE 8, is used by the java.util.Arrays class for its parallelSort() methods. These methods are similar to sort(), but leverage concurrency via the fork/join framework. Parallel sorting of large arrays is faster than sequential sorting when run on multiprocessor systems.
Делаю вывод, что parallelSort() как раз использует «вилку».
Возможно, что Вы добавите дополнительную информацию или поправите меня. Спасибо.
Кстати, с помощью моей няшной либы StreamEx это ещё проще:

ForkJoinPool myPool = new ForkJoinPool(10);
StreamEx.of(input).parallel(myPool). // и дальше что угодно
Я правильно понимаю, что этот функционал (StreamEx) в одной из Ваших статей описан?
Конкретно этой функции ещё не было, когда статью писал. С тех пор библиотека очень сильно выросла.
Спасибо. Буду смотреть.
По многочисленным тестам формула запуска приблизительно следующая, количество подзадач должно быть: (Количество ядер +0) или (Количество ядер +1). Эти варианты тестировался на нескольких серьезных серверах и нескольких обычных машинах.
Неудачная формулировка. Слишком общая, а речь явно идёт об cpu-bound задачах.
Вы правы. Речь действительно идет о cpu-bound задачах. Сейчас делаю «динамический» настройщик определения приоритетных ограничений для своих проектов, но он будет готов после нового года.
Only those users with full accounts are able to leave comments. Log in, please.