有哪些常见的 IO 模型?
操作系统-五种
UNIX 系统下, IO 模型一共有 5 种: 同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。
这也是我们经常提到的 5 种 IO 模型。
Java 中 3 种常见 IO 模型
BIO
NIO
AIO
![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
- Buffer 可以写入数据的内存块
- Channel 通道 一个channel对应着一个socket连接
Selector选择器: