I never claimed that the current implementation was "NIO". It is asynchronous and mostly non-blocking. NIO is not required to be asynchronous or non-blocking.
The driver was born out of a need to create an application that needed to extract every last bit of performance it could on both the application and MongoDB side. Our testing (and that of others you can find on the internet) was that BIO using a thread to read and a thread to write performs better than using NIO. It also has the advantage that the programing model is much easier to wrap your head around. Even in the NIO case you still need to determine the right thread model and allocation strategy (single thread, N threads, thread per N connections, etc) for you application.
A lot of people confuse the need for a server to _accept_ hundreds to thousands of mostly idle connections with the need for that same server to create a much smaller pool of connection to other resources. The driver is in that latter camp and needs to manage many fewer connections than a typical internet facing server will receive.
The other reason that people use NIO is for "non-blocking". This is a little bit of a double edged sword and having the driver just absorb all of the requests into an internal infinite buffer will eventually cause its own problems. This is generally referred to as the need for "back pressure". What we have done in the driver is give the ability to manage the amount of buffering the driver will do before applying back pressure (via blocking) threads making requests via the driver. The thing the driver won't do that may be useful is fail a request based on too many pending requests. That would not be hard to implement and if you are interested in that feature please add an issue
here.
As I said in the previous post in this thread. There will be the ability to support Netty and other connection models in the next version of the driver. That will get rid of all but 1 of the driver's threads to monitor the cluster is it connected to.
As we implement the Netty connection model we, as we always do, will try and get every last drop of performance from Netty but given our previous testing I do not expect it to perform as well as the two-thread connection model.
Rob.