BIO:blocking I/O 同步阻塞IO模式,数据的读取写入必须阻塞在一个线程内等待其完成

问题:由于是同步阻塞的,因此新需求来时只能通过新建线程的方式来接受请求,导致线程堆栈溢出等问题

伪异步IO:可以通过使用线程池来优化,不过在并发量增加时会导致线程量急剧膨胀,

NIO: non-blocking IO 同步非阻塞IO,IO面向流,而NIO面向缓冲区,任何时候访问NIO的数据,都是面向缓冲区的,最常用的缓冲区是ByteBuffer

channel(通道):NIO通过通道进行读写,通道是双向的,可读也可写

selector(选择器)NIO有通道和选择器,IO没有,选择器用于使用单线程处理多个通道

BIO,NIO,AIO 总结

缺点:编程复杂,底层由epoll实现,该实现存在空轮询bug,会导致cpu飙升100%,项目庞大后,维护成本很高,Netty的出现改善了JDK原生NIO所存在的一些问题

AIO 即NIO2,异步非阻塞IO模型,基于事件和回调机制实现

相关文章: