[logback-dev] [JIRA] Commented: (LBCORE-97) Starvation on AppenderBase.doAppend
Robert Elliot
rob at lidalia.org.uk
Sun May 31 19:21:35 CEST 2009
On 31 May 2009, at 17:51, Robert Elliot wrote:
> Just as an academic question, what do you think of an architecture
> where the various debug/info/error etc. calls on Logger all put
> something like a LoggingEvent (though probably an immutable
> equivalent) on a blocking queue, and a single thread takes events
> off the top of the queue and calls the appenders with it?
>
> Then appender calls would be done in a single threaded way, and so
> an appender implementation would not need to worry about thread
> safety.
...
> Would the problem Joern is experiencing with multiple threads
> competing for a lock and only one of them getting the lock still
> occur?
I think I can answer my own question at the end there - yes, it might
see the same problem if the bounded queue were full and there were
multiple threads blocked waiting to log an event - you could see one
thread go round and round and round being the only one adding to the
queue while all the others sit there, if it were back waiting to log
again before the consumer thread had managed to take another event off
the top of the queue. But ArrayBlockingQueue can be made fair via a
constructor parameter, in which case once the queue is full threads
will get to add to it in the order they started waiting to do so and
so the problem goes away.
More information about the logback-dev
mailing list