BIO、NIO、多路复用IO、AIO

BIO

阻塞IO,当用户发送一个请求时,系统还没有准备好数据的话,就会处于一个阻塞状态,一直等待数据准备好返回给用户之后,才能再发送下一个请求。

图解如下

BIO、NIO、多路复用IO、AIO

NIO

非阻塞IO,当用户发送一个请求时,系统还没有准备好数据的话,立马返回数据还没准备好的消息,然后用户继续发送同一请求,直到接收到准备好的数据为止。

图解如下

BIO、NIO、多路复用IO、AIO

多路复用IO

异步阻塞IO,redis就是使用这种IO模型,当用于发送一个请求时,系统还没有准备好数据的话,系统会对用户的这个请求进行标记,用户会对这个请求进行监听。

用户可以发送多个其他请求,如果第一次的请求依旧没有准备好数据,则多个其他请求会被阻塞。

当数据准备好时,系统会通知用户第一次请求的数据已经准备好,然后用户就再次发送这个请求,去请求并接收数据。

图解如下

BIO、NIO、多路复用IO、AIO

AIO

异步非阻塞IO,当用户发送一个请求时,无论是否准备好数据都返回结果,用户可以发送其他请求;

此时用户开启监听数据是否准备好,系统标记用户的这个请求,当数据准备好时,等到准备好数据之后,通知用户数据已经准备好,用户再次发送这个请求去请求并接收数据。

图解如下

BIO、NIO、多路复用IO、AIO