Scott compares simple and complex cases:
in a simple request/response case the overhead of the
select() call implied by NIO is noticeable, but in the more complex case
where you need to scale, NIO is the clear winner.
Check out
Scott's note
and you may also enjoy browsing other entries in his blog.