有哪些常见的 IO 模型?

操作系统-五种

UNIX 系统下, IO 模型一共有 5 种: 同步阻塞 I/O同步非阻塞 I/OI/O 多路复用信号驱动 I/O异步 I/O

这也是我们经常提到的 5 种 IO 模型。

Java 中 3 种常见 IO 模型

BIO

image.png

NIO

image.png

AIO

  1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22899296/1634030740786-9c0ae5a9-6101-4357-a66e-63bf71a86f98.png#clientId=u607997ec-054c-4&from=paste&height=28&id=udcb52c8e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=40&originWidth=845&originalType=binary&ratio=1&size=7565&status=done&style=none&taskId=ub7a5bbcb-479c-4a7e-8547-6248ef44646&width=583.5)

AIO : 用户发起系统调用后,等待内核将文件准备好,并拷贝到用户空间后,通知程序。Netty 之前也尝试使用过 AIO,不过又放弃了。这是因为,Netty 使用了 AIO 之后,在 Linux 系统上的性能并没有多少提升。AIO的底层实现仍使用EPOLL,没有很好实现AIO,因此在性能上没有明显的优势。Netty整体架构是reactor模型, 而AIO是proactor模型, 混合在一起会非常混乱,把AIO也改造成reactor模型看起来是把epoll绕个弯又绕回来

Java-网络IO

image.png

  • Buffer 可以写入数据的内存块
    image.png
    image.png
    image.png
    image.png
    • Channel 通道 一个channel对应着一个socket连接

image.png

Selector选择器:

image.png

image.png