三种IO模式
生活场景类比
食堂排队打饭模式:在窗口排队,打好饭后才离开
外卖小哥餐馆取餐模式:等待被叫号,好了自己去拿
下馆子包厢模式:点单后饭菜好了服务员直接端到包厢
类比对象
食堂/餐馆——服务器
饭菜——数据
饭菜好了——数据就绪
端菜/送菜——数据读取
阻塞与非阻塞
阻塞和非阻塞的指的是数据就绪前要不要等待。(饭菜好之前要不要死等?)
阻塞:没有数据传过来时,读会一直阻塞到有数据到来。缓冲区满时,写操作也会阻塞直到可写入为止。(饭菜好之前死等)
非阻塞:遇到上面的情况都是都直接返回。(饭菜好之前不等待)
同步与异步
同步和异步指的是数据就绪后数据的操作谁来完成。(饭菜好了谁来端?)
同步:数据就绪后自己读取。(饭菜好了自己端)
异步:数据就绪后直接读取好再回调给程序。(饭菜好了服务员端上来)
三种IO模式
IO模式 | 阻塞&非阻塞 | 同步&异步 |
---|---|---|
BIO | 阻塞 | 同步 |
NIO | 非阻塞 | 同步 |
AIO | 非阻塞 | 异步 |
总结
- BIO:同步阻塞,消耗资源,效率低下
- NIO:同步非阻塞,资源消耗小,性能高
- AIO:异步非阻塞,资源消耗小,性能最高。Windows实现成熟但是很少做服务器,Linux平台AIO实现不成熟,相比NIO性能提升不明显
- Netty不建议使用BIO,删除了AIO