经典的三种IO模式

  • 堵塞IO(BIO)
    等待数据的时候程序会堵塞,程序不可以做其他的事情,直到数据准备完全。
  • 非堵塞IO(NIO)
    等待数据的时候程序不会堵塞,程序可以做其他的事情,到数据准备好了会提醒程序准备好了,程序在区读取数据。
  • 异步IO(AIO)
    和NIO不同的是,程序不用主动的去读取数据,系统会为程序把数据读取好。
堵塞和非阻塞,同步和异步的概念:

在说这几个概念的时候就不得不提数据读取的两个阶段:

  1. 数据准备阶段:此时数据还未准备好,堵塞和和堵塞就是说的这个阶段是否等待。
  2. 数据读取阶段:此时数据已经准备好了,但是是否需要程序来主动读取,同步和异步说的就是这个阶段是否程序自己去去读数据。
阻塞和非阻塞:

阻塞和非堵塞是相对等待数据准备这个阶段而言的
说的是等待数据的时候是否会等待,堵塞就是在等待数据的时候程序不会干其他的事情,一直等到数据准备好,而非阻塞指的是程序不会等待,可以做其他的事情,所以总结起来,非阻塞对CPU的利用率更高。

同步和异步:

同步和异步是相对数读取阶段而言
同步指的是程序会主动的去读取数据,异步指的是系统负责数据的读取。

Netty中的IO模型:
Netty中的IO模型?

Netty中对三种IO模型都有支持,但是并不推荐使用BIO,同时Netty5已经停止维护,其采用的就是AIO,Netty4采用的是NIO。

Netty为什么要删除AIO的实现?

Windows实现成熟,但是很少用来做服务器。
Linux下AIO实现不成熟。
Linux下AIO相比于NIO性能提升不明显。

为什么Netty有多种NIO的实现?

Netty的实现更好,JDK中的NIO是水平触发,Netty默认是边缘触发,Netty的垃圾回收更少,性能更好。

你可能感兴趣的:(经典的三种IO模式)