Java中BIO、NIO 和 AIO

今天跟大家分享下Java中BIO、NIO 和 AIO的知识。

1 同步和异步

首先,我们需要弄清楚几个概念:同步和异步,阻塞和非阻塞。

  1. 同步
    进程触发 IO 操作的时候,必须亲自处理;
    比如你必须亲自去银行取钱。
  2. 异步
    进程触发 IO 操作的时候,可以不亲自处理,它把操作委托给 OS 处理,委托的时候需要告知数据的地址和大小,然后自己去做别的事情,当 IO 操作结束后会得到通知;
    比如你把银行卡给我,让我帮你去银行取钱,你需要告诉我银行卡密码和取多少钱,我取完了之后把钱给你。
  3. 总结
    自己干就是同步,别人干就是异步。

2 阻塞和非阻塞

  1. 阻塞
    进程触发 IO 操作的时候,如果此时此时没办法读或者写,那么进程就一直等待,直到读写结束;
    比如你去银行 ATM 取钱,前面有人在排队,那么就要一直等待,直到你取完钱;
  2. 非阻塞
    进程触发 IO 操作的时候,如果此时此时没办法读或者写,那么就先去做别的,等到有通知后,再继续读写;
    比如你去银行柜台取钱,人比较多,那就先领一个号,等着叫到号再去对应的窗口办理业务;这里稍微有些不太恰当的是,我们等待的过程中,还得听着叫号。
  3. 总结
    我要等着不能做其他事就是阻塞,我不用等可以做其他事就是异步。

3 BIO

**同步阻塞;**一个请求过来,应用程序开了一个线程,等 IO 准备好,IO 操作也是自己干;
采用 BIO 模型的服务端,由一个独立的 Acceptor 线程负责进行监听;在 while(true) 循环中调用 accept() 方法,等待客户端的请求;
一旦接收

猜你喜欢

转载自blog.csdn.net/weixin_45794138/article/details/103912487