I now understand the algorithm, but I don't understand why is the way it is.

Consider one of these objects configure with a handful of threads and
a pretty big queue.

When the first request comes in, the object creates one runner. It
then won't create a second runner until the Q reaches 1/2-full.

If the idea is that we want to pile up 'a lot' (1/2-of-a-q) of work
before sending any of it, why start that first runner?

On Wed, May 29, 2013 at 2:45 PM, Benson Margulies <bimargul...@gmail.com> wrote:
> Ah. So now I have to find some other explanation of why it never
> creates more than one thread, even when I make a very deep queue and
> specify 6 threads.
>
> On Wed, May 29, 2013 at 2:25 PM, Shalin Shekhar Mangar
> <shalinman...@gmail.com> wrote:
>> On Wed, May 29, 2013 at 11:29 PM, Benson Margulies 
>> <bimargul...@gmail.com>wrote:
>>
>>> The comment here is clearly wrong, since there is no division by two.
>>>
>>> I think that the code is wrong, because this results in not starting
>>> runners when it should start runners. Am I misanalyzing?
>>>
>>> if (runners.isEmpty() || (queue.remainingCapacity() < queue.size() // queue
>>>
>>>       // is
>>>
>>>       // half
>>>
>>>       // full
>>>
>>>       // and
>>>
>>>       // we
>>>
>>>       // can
>>>
>>>       // add
>>>
>>>       // more
>>>
>>>       // runners
>>>               && runners.size() < threadCount)) {
>>>
>>
>>
>> queue.remainingCapacity() returns capacity - queue.size() so the comment is
>> correct.
>>
>> --
>> Regards,
>> Shalin Shekhar Mangar.

Reply via email to