I feel the implementation is flawed.

I would prefer that the pool size would increase from minimum to maximum
under load to increase throughput and then revert back to the minimum when
not under load.

But instead, the pool size stays at minimum until the queue is full. In my
opinion, the application is about to fall over at this point. Only then
will the pool size increase which i think is crazy / stupid.

Because of this, I've always seen core pool size and max pool size set to
the same value.

To achieve my preferred behaviour (above) I think you can specify different
pooling behaviour. I think it required throwing exceptions and extending
ThreadPoolExecutor or something nasty like that.
 On 1 Jul 2014 12:14, "D Tim Cummings" <[email protected]> wrote:

> Ok, thanks for explaining this... I think :)
>
> I had a read of the ThreadPoolExecutor javadoc. It seems to me that
> core-pool-size should be described as the maximum pool size before queuing.
> Describing it as the minimum pool size is misleading because there is no
> minimum. The number of threads in the pool before any have been invoked is
> always zero.
>
> Tim
>
> On 1 Jul 2014, at 16:25, Lance Java <[email protected]> wrote:
>
> > If you read the javadoc for java.util.concurrent ThreadPoolExecutor
> you'll
> > see that the number of threads will only increase when the queue has
> > reached its capacity. Crazy / stupid behaviour if you ask me... But
> > expected.
> >
> > I've been caught out by this before when I set core pool size to 1,
> > expecting the thread size to increase under load.
> > On 1 Jul 2014 02:53, "D Tim Cummings" <[email protected]> wrote:
> >
> >> Hi
> >>
> >> I am using Tapestry 5.3.7 and the ParallelExecutor. When I increase the
> >> max-pool-size I am not able to use any more threads. However when I
> >> increase the core-pool-size I am able to use more threads. It looks like
> >> the max-pool-size is not doing anything (or I am not understanding what
> it
> >> is supposed to do).
> >>
> >> When I use the defaults I get a maximum of 3 threads and other threads
> >> seem to wait in a queue and execute later.
> >>
> >> When I use the following settings in web.xml I still get only 3 threads
> >>
> >> <context-param>
> >>  <param-name>tapestry.thread-pool.core-pool-size </param-name>
> >>  <param-value>3</param-value>
> >> </context-param>
> >> <context-param>
> >>  <param-name>tapestry.thread-pool.max-pool-size</param-name>
> >>  <param-value>20</param-value>
> >> </context-param>
> >>
> >> When I use the following settings in web.xml I get 3 threads
> >>
> >> <context-param>
> >>  <param-name>tapestry.thread-pool.core-pool-size </param-name>
> >>  <param-value>3</param-value>
> >> </context-param>
> >> <context-param>
> >>  <param-name>tapestry.thread-pool.max-pool-size</param-name>
> >>  <param-value>200</param-value>
> >> </context-param>
> >>
> >> When I use the following settings in web.xml I get 20 threads
> >>
> >> <context-param>
> >>  <param-name>tapestry.thread-pool.core-pool-size </param-name>
> >>  <param-value>20</param-value>
> >> </context-param>
> >> <context-param>
> >>  <param-name>tapestry.thread-pool.max-pool-size</param-name>
> >>  <param-value>20</param-value>
> >> </context-param>
> >>
> >> I noticed that the documentation says the default max-pool-size is 20 (
> >> http://tapestry.apache.org/parallel-execution.html ) while the API docs
> >> say the default is 10 (
> >>
> http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/IOCSymbols.html
> >> ).
> >>
> >> I am invoking my threads from a service which contains
> >>
> >>  @Inject
> >>  private ParallelExecutor executor;
> >>
> >>  @Override
> >>  public void doStartThread() {
> >>    if ( myFuture == null || myFuture.isDone() ) {
> >>      myFuture = executor.invoke(new MyInvokable());
> >>    }
> >>  }
> >>
> >> I have tried in Jetty 8.1.2 (Run Jetty Run in Eclipse) and Tomcat
> 7.0.52.
> >>
> >> Cheers
> >>
> >> Tim
> >>
>
>

Reply via email to