BIO/NIO/AIO原理初识

1,385 阅读2分钟

1、BIO(同步阻塞IO)

  • 服务端创建一个ServerSocket,客户端就有一个Socket去链接这个ServerSocket,然后ServerSocket接收到客户端的Socket请求之后就会建立一个专属的Socket+线程去和客户端的Socket去通信(长时间维护)

  • 同步阻塞通信:客户端发送一个请求,服务端Socket就进行处理后返回,响应必须是等待处理完毕之后才会返回的,在这之前是什么也做不了。

  • 缺点:每次一个客户端的接入就会有一个线程+Socket对其进行通信,这会导致客户端接入太多,服务端线程过多,导致崩溃。


2、NIO(同步非阻塞IO)

  • Buffer(缓冲区):channel将数据写入Buffer,然后从Buffer中读取数据,包括int、Long、CharBuffer等多种数据类型。

  • channel:通过channel进行数据的读写

  • selector(多路复用器):selector会轮询channel,如果某个channel中发生了数据请求,selector就会将通过SelectionKey会哦去有数据请求的channel,进行IO操作。一个Selector(一个线程)可以轮询上千万个channel,也就是客户端可以接入的数量激增。

  • 通过一个线程轮询大量的channel,每次获取一批有事件的channel,然后对每个请求启动一个线程进行处理,并设置一个线程池,当线程处理完毕以后,就回收线程,就不会像BIO需要一直维持为每个客户端创建的Socket+线程


3、AIO(异步非阻塞IO)

  • 基于Proactor模型,每个连接发送的请求,都会绑定一个Buffer,然后通知操作系统异步的完成读操作,此时程序可以去干别的事,操作系统完成数据的读取之后,就会回调接口,将读出的数据给你。

  • 将数据进行处理,接着将结果返回

  • 写数据的时候也是给操作系统一个buffer,让操作系统获取数据完成写操作。