1ClassicI/OmodeBIO(阻塞I/O)JDK1.4pre-NIO(非阻塞I/O)JDK1.4(2002,java.nio包)AIO(异步I/O)JDK1。7(2011)1.2在数据准备好之前对比阻塞和非阻塞的概念。你想等吗?当block中没有数据时,read会阻塞,直到有数据为止;当缓冲区满了,写操作也会阻塞非阻塞直接返回同步异步数据就绪,谁来完成数据操作?需要自己读取是同步数据准备直接读取然后回调给程序是异步哦!为什么要废除阻塞I/0(BIO/OIO)?连接数高时:阻塞->资源消耗,效率低下。阻塞就是等待,等待会一直占用线程。当连接数很高时,大部分线程又在等待,会耗尽系统的线程资源。为什么要删除已经做好的AIO支持?Windows很成熟,但很少用作服务器。Linux常被用作服务器,但其AIO实现还不够成熟。linux下AIO与NIO相比性能提升并不明显,所以netty也和实际情况有关。可选择支持高性能IO模式。为什么Netty支持多种实现?一般的NIO实现(Common)也是Linux下的epoll,但是Netty还是选择了自己的实现,因为它更好:Netty提供了更多的可控参数:JDK的NIO默认实现是水平触发Netty是边缘触发(Default)和水平触发,以及switchableNetty实现了更少的垃圾收集和更好的性能NIO一定比BIO好?BIO代码简单,在特定场景下:连接数少,并发低,BIO性能不输NIO。当然,考虑到业务发展后期的复杂场景,Netty只考虑了NIO。本文转载自微信公众号「JavaEdge」,可通过以下二维码关注。转载本文请联系JavaEdge公众号。
