The socket listener and readers use a complex synchronization to update the reader's NIO Selector. Updating active selectors is not thread-safe so precautions are required.
However, the current locking choreography results in a serialized distribution of new connections to the parallel socket readers. A slower/busier reader can stall the listener and throttle performance.
The problem manifests as unexpectedly low cpu utilization by the listener and readers (~20-30%) under heavy load. The call queue is shallow when it should be overflowing.