1.阻塞和非阻塞IO:应用程序在执行IO操作后,是否会阻塞自身运行
- 阻塞IO:调用者发起一次请求后,一直到返回最终结果,当前线程会被挂起
- 非阻塞IO:调用者发起一次请求后,不能立刻得到最终结果前,线程不会被挂起
2.同步和异步IO:程序如何获取数据即消息通讯机制
- 同步IO:调用者主动等待最终结果
- 异步IO:调用者发起“请求”后,被调用者直接返回(没有结果),处理完毕后被调用者会发起一个通知/调用回调函数返回最终结果
3. BIO,NIO,AIO:
3.1 区别&解释(出自作者):
- 同步阻塞 - BIO:
- 发送方发送请求一直等待响应
- 接收方处理请求直到返回结果才响应发送方,期间接收方不能做其他的工作
- 同步非阻塞 - NIO:
- 发送方发送请求一直等待响应
- 接收方处理请求时,不能马上立刻拿到结果,立即返回(没有结果) ,接收方可以做其他的工作
- 发送方未收到结果,发送方仍等待;直到接收方处理完后,将状态和结果通知/回调接收方,接收方再响应发送方
- 异步阻塞(不常见)
- 发送方发送请求,不等待响应,可继续做其他工作
- 接收方不能马上等待结果,当前线程挂起,一直到得到结果,期间不能做其他工作
- 异步非阻塞 - AIO
- 发送方发送请求后,不等待响应,继续其他工作
- 接收方不能马上得到结果,立即返回(没有结果),可做其他工作
- 当操作完成后,将状态及结果通知/回调给接收方,接收方再响应发送方
3.2 极客时间 - Netty的demo(和作者理解的不一致):
- 背景:打饭
- 口径:
- 饭店 - 服务器server;
- 饭菜 - 数据data;
- 饭好了 - 数据准备好data runable;
- 端菜/送菜 - 数据读取data read
- 场景:
- 食堂打饭;排队窗口,打好才走 - BIO
- 点单,等待被叫;等待被叫,饭好了自己端走 - NIO
- 包厢模式;点单后直接由他人端上 - AIO
4.同步非阻塞模型 - NIO
- 主要由 “channel - 通道”,“Buffer - 缓冲区” ,“Selector - 多路复用器”构成
- IO/NIO主要差异性:
- IO操作对象:字节/字符流;NIO操作对象:channel & buffer