views:

5238

answers:

6

What options for async io (socket-based) are there in java other then java.nio? Also does java.nio use threads in the backround (as I think .NET's async-socket-library does, maybe it's been changed) or is it "true" async io using a proper select call?

+3  A: 

java.nio is just a package - a collection of "dumb" classes - by itself it does not employ any use of threads. When used properly, such as in the Reactor design pattern, you can achieve proper, fully-scalable, asynchronous I/O.

Yuval A
+3  A: 

If you are interested in using it for Network Stuff. A really good choice is:

http://mina.apache.org/

Have a look there its easy to use and very powerfull.

+10  A: 

Java's NIO package (as of Java6), provides support for non-blocking I/O only, via Selectors. Java7 is hopefully going to ship with NIO.2, which includes asynchronous I/O support. Today, your best bet is to make use of a framework. ARMistice mentioned Mina. Here are some others.

  1. Grizzly. This is the I/O core for Sun's GlassFish server. Grizzly provides a facility for doing asynchronous reads/writes (via a queue model). It supports TCP and UDP a like. I've used Grizzly in a couple of projects. There are things I like and dislike about the framework, but to detail this is really another topic. I will say that it's quite easy to get something up and running and Grizzly does a lot of the heavy lifting for you.
  2. Netty. This project comes from one of the original authors on the Mina project. I haven't used this one so I don't know about about its support for asynchronous I/O. You should take a look.

Now, with regard to your question about threads, NIO Selectors do not use threads for non-blocking I/O. In JDK6 they use select() under Windows and the epoll facility on newer Linux kernels. For asynchronous I/O, threading details depend on the framework.

JLR
Java's NIO also supports blocking IO. ;)
Peter Lawrey
Netty is asynchronous and event-driven like MINA. Check out the testimonials and performance reports written by real users in the home page. :)
Trustin Lee
+3  A: 

Another suggestion in regards to libs would be Naga (http://naga.googlecode.com). It is a bit less like a framework and more like a library. It tries to look more like the ordinary java sockets, if that is your cup of tea. It's minimalistic compared to Grizzly, Mina and Netty.

Nuoji
Naga actually seems like a very nice wrapper around the asynchronous stuff.
kread
A: 

You might find this discussion interesting

http://www.artima.com/lejava/articles/more_new_io.html

Out of interest, what is your use case for asynchronous IO?

Peter Lawrey
A: 

check out netty, http://www.jboss.org/netty

fiorix