RFR 8190974 Parallel stream execution within a custom ForkJoinPool should obey the parallelism

Martin Buchholz martinrb at google.com
Wed Nov 8 23:48:53 UTC 2017


You probably want a different summary.

+ * @summary Tests counting of streams containing Integer.MAX_VALUE + 1 elements


Will this fail if common pool parallelism is odd?

+            int splitsForPHalfC = countSplits(new
ForkJoinPool(ForkJoinPool.getCommonPoolParallelism() / 2));


I would drop the word "factor" below:

+     * Default target factor of leaf tasks for parallel decomposition.


Do you ever test with

-Djava.util.concurrent.ForkJoinPool.common.parallelism=0

 * @run junit/othervm/timeout=1000
 *      --add-opens java.base/java.util.concurrent=ALL-UNNAMED
 *      --add-opens java.base/java.lang=ALL-UNNAMED
 *      -Djsr166.testImplementationDetails=true
 *      -Djava.util.concurrent.ForkJoinPool.common.parallelism=0
 *      JSR166TestCase




On Wed, Nov 8, 2017 at 1:01 PM, Paul Sandoz <paul.sandoz at oracle.com> wrote:

> Hi,
>
> Please review this patch to ensure that a parallel stream obeys the
> parallelism of a custom fork join pool when it is executed within that pool:
>
>   http://cr.openjdk.java.net/~psandoz/jdk10/JDK-8190974-par-
> stream-custom-pool/webrev/ <http://cr.openjdk.java.net/~
> psandoz/jdk10/JDK-8190974-par-stream-custom-pool/webrev/>
>
> Streams currently do not support capabilities to control the level of
> parallelism and therefore resources utilised (tricky API design problem to
> get right).
>
> At the moment the trick is to run stream executions within a custom pool,
> however the number of fork join tasks created will be in proportion to the
> parallelism of the common pool thus the execution will be over-provisioned.
> This can be especially noticeable on large machines with many cores.
>
> Paul.


More information about the core-libs-dev mailing list