阅读 367

IO模型(BIO、NIO、AIO)

1.什么是IO?

从计算机结构的视角来看的话, I/O 描述了计算机系统与外部设备之间通信的过程。

从应用程序的角度看,为了保证操作系统的稳定性和安全性,一个进程的地址空间划分为用户空间内核空间。像我们平常运行的应用程序都是运行在用户空间,只有内核空间才能进行系统态级别的资源有关的操作,比如如文件管理、进程通信、内存管理等等。也就是说,我们想要进行 IO 操作,一定是要依赖内核空间的能力。

image.png

我们的应用程序对操作系统的内核发起 IO 调用(系统调用),操作系统负责的内核执行具体的 IO 操作。

Java中常见的IO模型有:BIO(同步阻塞IO模型)、NIO(同步非阻塞IO模型)、AIO(异步IO模型)。

2.BIO(同步阻塞IO)

同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到在内核把数据拷贝到用户空间。

image.png BIO模型只能处理连接数量不高的场景,当面对十万甚至百万级连接的时候,传统的 BIO 模型是无能为力的。

3.NIO(同步非阻塞IO)

同步非阻塞 IO 模型中,应用程序会一直发起 read 调用,等待数据从内核空间拷贝到用户空间的这段时间里,线程依然是阻塞的,直到在内核把数据拷贝到用户空间。

image.png

相比于同步阻塞 IO 模型,同步非阻塞 IO 模型通过轮询操作,避免了一直阻塞。

4.AIO(异步IO模型)

异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

image.png

5.总结

image.png

文章分类
后端
文章标签