David is right about common pool not being a general-purpose executor. However, its intent is slightly broader than “just for streams”; it is intended as a general-purpose FJ Pool for any library that wants to spew parallel calculations into a shared FJPool and be a good citizen. Creating multiple FJPools without a coordinated global resource management strategy is likely to be suboptimal.
If a library wants to offer a customization point where it accepts an FJPool, clients should be encouraged to pass the common pool (and the common pool is a good default) unless there are specific reasons not to. > On Aug 7, 2016, at 5:00 PM, David Holmes <david.hol...@oracle.com> wrote: > > Hi Christian, > > On 8/08/2016 9:16 AM, Claes Redestad wrote: >> Hi Christian, >> >> have you looked at java.util.concurrent.ForkJoinPool.commonPool()? > > That isn't quite the same thing as a general shared executor. > >> /Claes >> >> On 2016-08-08 00:51, Christian Schulte wrote: >>> Hello, >>> >>> whenever I need to update an existing codebase to add some kind of >>> parallelization, I am in the need of an executor matching the number of >>> processors available at runtime. Most of the time I end up using >>> something like: >>> >>> 'Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())' >>> >>> >>> If every library used by an application needs to maintain its' own >>> executors the application ends up with starting number of libraries used >>> times number of available processors threads. That does not scale. I > > Libraries in general should not be defining how their functionality gets > executed. If a "library" is really a subsystem that might > utilize/benefit-from parallelization then it should not encapsulate/hide that > aspect but make it explicitly part of the initialization API for itself ie it > should be able to accept an Executor/ExecutorService to use. Ultimately it is > the application that has to try and control these things, so libraries must > provide API's to allow for cooperation with their hosting applications. > > The default FJPool was a special case to support the parallel streams > libraries. It is not an ideal solution. > > My 2c. > > Cheers, > David > >>> think there really is a need for some kind of default executor provided >>> by the platform. I am suprised I cannot find anything like that >>> anywhere. I would like to request an enhancement providing such a >>> default platform executor everyone can use to add parallelization >>> without ending up with tons of threads when all you want is making use >>> of the system's parallelization capabilities. >>> >>> Regards,