Re: Tradeoffs between ConcurrentLinkingQueue and LinkedBlockingQueue
On 28-09-2010 11:24, Daniel Pitts wrote:
On 9/28/2010 2:25 AM, Sebastian Millies wrote:
Am 28.09.2010 10:32, schrieb Patricia Shanahan:
Sebastian Millies wrote:
what factors should I consider when choosing between a
ConcurrentLinkingQueue and a LinkedBlockingQueue as a
queue implementation?
It all depends. If you go with the non-blocking version you will
probably need to put a Thread.sleep() call in each consumer's poll loop,
[snip]
In general, good modularity can put off a lot of "which is faster"
decisions until you have the program working and can measure it. At that
point you only have to work on those "which is faster" decisions that
have real performance impact. Finding out which implementation is faster
is easy when the decision is internal to a single class that is taking a
significant amount of time in a program you can measure.
Patricia
thanks, I think that is good advice. BTW, the non-blocking code looked
simpler at first because there was no InterruptedException to deal
with, but that was because I hadn't thought of the need to sleep.
The right choice also depends on the number of consumers vs producers,
number of CPU cores. Throughput of consumers and producers, etc...
My suggestion is the same as Patricia. Start with LinkedBlockingQueue,
and switch to some other approach if that isn't good enough.
Given the expertise put into java.util.concurrent, then if
blocking behavior is needed I don't think there are a
faster way than the blocking queue.
Arne