title: non-blocking IO vs async IO and implementation in Java
body: <p>Trying to summarize for myself the difference between these 2 concepts (because I'm really confused when I see people are using both of them in one sentence, like "non-blocking async IO" which I'm trying to figure out what does it mean).</p>
  
  <p>So, in my understanding non-blocking IO is primary the OS mechanism to process the IO if there is any data ready, otherwise just return error/do nothing. </p>
  
  <p>In async IO you just provide a callback, and your application will be notified when the data is available.</p>
  
  <p>So what is actually "non-blocking async IO"? And how all them can be implemented in Java (standard JDK, without external libs, I know there are <code>java.nio.channels.{Channels, Selector, SelectorKey}</code> and <code>java.nio.channels.{AsynchronousSocketChannel}</code>): non-blocking IO, async IO, and non-blocking async IO (if there is such thing)?</p>