Что такое «пакетный размер» в методе .asparallel () java - PullRequest
0 голосов
/ 23 марта 2020

Java, точнее, база сбора eclipse, имеет метод с именем ...

asparallel(ExecutorService ES, int batchSize)

Он принимает два аргумента, как показано. Что такое аргумент batchSize?

Фон

Это не количество активных потоков. Это определяется ExecutorService. Чтобы проиллюстрировать это, это поток схемы c кода, который я предоставил (не могу поделиться больше).

ExecutorService executor = Executors.newWorkStealingPool(pThreads);
List<Object> mParallelOutput = objectsOfInterest.toList()
    .asParallel(executor, batchsize1)
    .flatCollect(myObject-> MySubComponent.toList()
                               .asParallel(executor, batchsize2)
                               .flatCollect(p -> p.performComputation(myObject));

В качестве примера у меня есть «куча» вычислений (performComputation() метод), который необходимо выполнить для 1-32 объектов в списке objectsOfInterest. Все вычисления могут выполняться параллельно, и мы должны быть максимально эффективными. Пытаясь понять поток, я хочу знать, что аргумент batchsize для метода asparallel(). Кроме того, я не уверен, что двойной вызов asparallel в приведенном выше примере кода имеет какое-либо дополнительное преимущество.

1 Ответ

0 голосов
/ 23 марта 2020

С https://github.com/eclipse/eclipse-collections/blob/master/docs/guide.md:

Размер пакета определяет количество элементов из резервного набора (FastList или UnifiedSet), которые обрабатываются каждой задачей, переданной в поток бассейн. Подходящие размеры пакетов для задач, связанных с процессором, обычно больше, в диапазоне от 10000 до 100000.

Итак, я заключаю, что в вашем случае значение batchSize = 1 имеет смысл. (полностью параллельно)

Или:

 #tasks (submitted to the TP) = collection.size() / batchSize

И, поскольку я понимаю количество потоков Исполнителя как число задач, которые могут быть обработаны одновременно, я бы "выровнял" оба значения: #threads ~= #tasks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...