[ 
https://issues.apache.org/jira/browse/JCS-171?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15813128#comment-15813128
 ] 

Wiktor N commented on JCS-171:
------------------------------

Thanks.

I was surprised by this idea too. I prefer more stable solution with pooled 
threads. I guess that this might be the safe default as it should be easier to 
get right.

There two things worth considering:
1. As it might be the case, that disk I/O saturates the thread and more threads 
will not result in more throughput, this might not be the case for remote 
caches (where network latency might kill the throughput). Not sure if this is 
the case as I'm not use remote caches

2. As I've learned recently, Java ThreadPoolExecutor behaves far from 
expectations that I had, as it spawns new threads only when workQueue refuses 
to take next task. In JCS we have following defaults:
corePoolSize = 4
maxPoolSize =150
workQueueSize = 2000

It means, that we have to have 2000 events in the queue before next task will 
spawn a fifth thread to try to handle with the tasks. It means also, that if 
someone's configure workQueueSize as unlimited - then he will be left with only 
4 workers, no matter the load. We should probably disallow such configurations.

And as I understand, we do not care much about loosing some of the tasks handed 
to ThreadPoolExecutor as it means, that we might just not put into the cache 
some of the cache elements. Which might sound good in case of overload

So to sum up - yes - I think that pooled implementation is a good default.

> Multiple CacheEventQueue.QProcessor spawned for the same cache region
> ---------------------------------------------------------------------
>
>                 Key: JCS-171
>                 URL: https://issues.apache.org/jira/browse/JCS-171
>             Project: Commons JCS
>          Issue Type: Bug
>          Components: Composite Cache
>    Affects Versions: jcs-2.0
>            Reporter: Wiktor N
>            Assignee: Thomas Vandahl
>             Fix For: jcs-2.1
>
>         Attachments: CacheEventQueue.patch
>
>
> I noticed that running on new version of JCS I get multiple 
> CacheEventQueue.QProcessor thread. They spawn from time to time.
> I've checked recent changes and changes few things in r1774925 look 
> suspicious:
> 1. In previous code we spawned a new thread in synchronized section. This got 
> us a guarantee, that there will be no two threads trying to spawn a new 
> thread in the same time. Maybe some locking is needed around thread creation?
> 2. QProcessor uses isAlive() method. But this is defined by Thread.isAlive() 
> while it should probably check for CacheEventQueue.this.isAlive()



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to