AIO、BIO、NIO的区别在 java 中 IO 一般分为几类
1. 同步IO 和 异步IO(即Synchronous IO 和 Asynchronous IO)
2. 阻塞IO和非阻塞IO(即Blocking IO 和 Non-Blocking IO)
3. 同步阻塞IO(即Blocking IO)
4. 同步非阻塞IO(即Non-Blocking IO)
5. 异步非阻塞IO(即Synchronous-Non-Blocking IO)
所以题述的 AIO, BIO, NIO 则分别指的是【异步IO】,【同步阻塞IO】,【异步非阻塞IO】
下面我们分别来阐述一下这3者的区别
1. AIO
AIO是异步非阻塞的,此时无需一个线程去轮询所有的 IO 状态的改变,当IO的状态改变,系统就会调用对应的线程来处理
就好笔之前我们烧水的时候要一直守着水壶,防止烧开了水溢出,这就是同步等待
当我们在水壶上安装一个警报器,水一开就会自动提示我们去关火,此时我们可以做别的事情,这就是异步
2. NIO
NIO表示同时支持阻塞与非阻塞的方式,这样子听起来有点难理解,我们打个比方
还是拿烧水来讲,NIO就是我们把水壶放到放在炉上烧,我们去做别的事情,但是我们要找一个人每个几分钟去看看水烧开了没有
一旦水烧开了就来通知我去关火,所以同步的意思是需要有人一直定时监看水壶的状态,非阻塞是说我们在烧水的期间可以做自己的事情
3. BIO
BIO是性能最差的IO,数据读取和写入时必须阻塞一个线程,直到任务完成
还是以烧开水为例,我把水壶放到炉上烧,我要一直守在炉的旁边,直到水烧开为止,其他事情只能由别人来做
|
|