今天跟大家分享下Java中BIO、NIO 和 AIO的知识。
1 同步和异步
首先,我们需要弄清楚几个概念:同步和异步,阻塞和非阻塞。
- 同步
进程触发 IO 操作的时候,必须亲自处理;
比如你必须亲自去银行取钱。 - 异步
进程触发 IO 操作的时候,可以不亲自处理,它把操作委托给 OS 处理,委托的时候需要告知数据的地址和大小,然后自己去做别的事情,当 IO 操作结束后会得到通知;
比如你把银行卡给我,让我帮你去银行取钱,你需要告诉我银行卡密码和取多少钱,我取完了之后把钱给你。 - 总结
自己干就是同步,别人干就是异步。
2 阻塞和非阻塞
- 阻塞
进程触发 IO 操作的时候,如果此时此时没办法读或者写,那么进程就一直等待,直到读写结束;
比如你去银行 ATM 取钱,前面有人在排队,那么就要一直等待,直到你取完钱; - 非阻塞
进程触发 IO 操作的时候,如果此时此时没办法读或者写,那么就先去做别的,等到有通知后,再继续读写;
比如你去银行柜台取钱,人比较多,那就先领一个号,等着叫到号再去对应的窗口办理业务;这里稍微有些不太恰当的是,我们等待的过程中,还得听着叫号。<