1.BIO方式
BIO即Blocking IO,采用阻塞的方式实现。也就是一个Socket套接字需要使用一个线程来进行处理。发生建立连接,读数据,写数据操作的时候,都可能会阻塞。
这样操作虽然很简单,但是一个线程只能处理一个Socket。
那么在支持并发的连接,就需要更多的线程来完成这个工作。
2.NIO方式
NIO即是Nonblocking IO,基于事件驱动思想,采用的是Reactor模式。带来的好处是不需要为每个Socket套接字分配一个线程,而可以在一个线程中处理多个Socket套接字相关的工作。
工作模式:统一通过Reactor对客户端的Socket套接字的事件做处理,然后派发到不同的线程中。这样就解决了BIO中为了支撑更多Socket套接字而需要打开更多线程的问题。
3.AIO方式
AIO即AsynchronousIO,就是异步IO。AIO采用的是Proator模式,AIO与NIO的差别是,AIO在进行读写操作的时候,只需要调用相应的read/write方法,并且需要传入CompletionHandler(动作完成的处理器) 在完成动作后再调用CompletionHandler,当然,在不同的系统上会有一些细微的差异,不同的语言在SDK上也会有些差异,但总体就是这样的工作方式。NIO的通知发生在动作之前,是在可写,可读的时候,Selector发现这些时间后调用Handler处理。AIO在通知的时候表示相关操作已经完成。