Netty

BIO、NIO、AIO 的区别

BIO、AIO和NIO是Java中不同的I/O模型,它们在处理输入输出操作时有不同的特点。

  • BIO: 阻塞式的I/O模型。当一个线程执行I/O操作时,如果数据还没准备好,这个线程会被阻塞,直到数据到达。适合连接数较少且固定的场景,但扩展性较差。在Java中用ServerSocket和Socket的accpet方法,用来阻塞,等待客户端连接。
  • NIO: 非阻塞的I/O模型。NIO使用缓冲区和通道来处理数据,提高了I/O操作的效率。支持面向缓冲区的读写操作,可以处理大量并发的连接。在java.nio包中提供了Selector、Channel等类实现高效的非阻塞IO
  • AIO: 异步I/O模型,从Java 7开始引入。在AIO中,I/O操作被发起后,线程可以继续执行其他任务,一旦I/O操作完成,操作系统会通知线程。适合需要处理大量并发I/O操作,且希望避免I/O操作阻塞线程的场景。在Java中通过AsynchronousSocketChannel类来实现异步IO
  • 使用场景:
    • BIO适合低并发、连接数较少的应用。
    • NIO适合高并发、需要处理大量连接的应用。
    • AIO适合需要高性能、异步处理I/O操作的场景。

BIO就是上面网络编程中的样子,一个连接一个线程,

NIO通过使用selector实现多路复用,一个线程管理多个连接,通过事件驱动(accept,read)

一般使用Netty框架,基于NIO,即时通讯,网关。

AIO的话:Java中使用较少,Linux下性能不如NIO

总结来说javaAPI给我们提供了网络连接的各种api已经帮我们处理好了网络连接,序列化处理等各种操作了,我们可以通过背八股文来了解实现细节,然后使用java原生的NIO包来维护一个服务端很麻烦,所以Netty就出现了一个网络超级工具包,专门帮我们处理网络编程的类似于Mybatis