【从零学Netty】三种IO模式


三种IO模式

生活场景类比

  1. 食堂排队打饭模式:在窗口排队,打好饭后才离开

  2. 外卖小哥餐馆取餐模式:等待被叫号,好了自己去拿

  3. 下馆子包厢模式:点单后饭菜好了服务员直接端到包厢

    类比对象

    ​ 食堂/餐馆——服务器

    ​ 饭菜——数据

    ​ 饭菜好了——数据就绪

    ​ 端菜/送菜——数据读取

阻塞与非阻塞

​ 阻塞和非阻塞的指的是数据就绪前要不要等待。(饭菜好之前要不要死等?)

​ 阻塞:没有数据传过来时,读会一直阻塞到有数据到来。缓冲区满时,写操作也会阻塞直到可写入为止。(饭菜好之前死等)

​ 非阻塞:遇到上面的情况都是都直接返回。(饭菜好之前不等待)

同步与异步

​ 同步和异步指的是数据就绪后数据的操作谁来完成。(饭菜好了谁来端?)

​ 同步:数据就绪后自己读取。(饭菜好了自己端)

​ 异步:数据就绪后直接读取好再回调给程序。(饭菜好了服务员端上来)

三种IO模式

IO模式 阻塞&非阻塞 同步&异步
BIO 阻塞 同步
NIO 非阻塞 同步
AIO 非阻塞 异步

总结

  1. BIO:同步阻塞,消耗资源,效率低下
  2. NIO:同步非阻塞,资源消耗小,性能高
  3. AIO:异步非阻塞,资源消耗小,性能最高。Windows实现成熟但是很少做服务器,Linux平台AIO实现不成熟,相比NIO性能提升不明显
  4. Netty不建议使用BIO,删除了AIO

文章作者: maybe
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 maybe !