Ok, but why didn't we get just a pool of threads that accept and then directly process? I don't see how it is different… is it?
One difference I see is the fact that acceptor threads wait if there is no available processor threads, and then they drop the messages!
Does it mean we have as a requirement : messages must be dropped if there is no resources available to process them?
I'm trying to clarify the requirements we are trying to achieve independently of the current implementation that seems to have been written by many people at different times 
Updated the description.