用过JavaScript或者jQuery的同学都知道,JavaScript特别是jQuery中存在大量的回调函数,例如Ajax、jQuery的动画等。
上面的代码是jQuery的Ajax,由于Ajax是异步的,所以在请求URL的过程中并不会阻塞程序,也就是程序运行到(1)并不用等待Ajax请求的结果,就继续往下执行(2)。而$.get的第二个参数是一个回调函数,当Ajax请求完成后,才会调用这个回调函数执行(3)。
这个例子只是用来理解一下异步的概念,没玩过JS看不懂的同学也没关系。
在传统的IO(BIO/阻塞IO)中,所有IO操作都会阻塞当前线程,直到操作完成,所有步骤都是一步一步进行。例如:
但是在异步网络编程中,由于IO操作是异步的,也就是一个IO操作不会阻塞去等待操作结果,程序就会继续向下执行。
在Netty中,很多网络IO操作都是异步的,比如向网络的另一端write写数据、客户端连接服务器的connect操作等。
例如Netty的write方法(以及writeAndFlush方法),执行完write语句后并不表示数据已经发送出去