1.
BIO 是阻塞式的
服务器端调用Read(Buffer)为例:有可能出现inputStream的缓存RecvQ读完了但是客户端的sendQ仍然在准备数据,此时服务器就会阻塞等待客户端传输数据
服务器端调用Write(Buffer)为例:有可能出现outputStream的缓存SendQ已经满了但是服务器端的RecvQ仍然满的,此时客户端同样会处于阻塞等待服务器消化RecvQ直到RecvQ可以容纳SendQ的数据
NIO是非阻塞式
引入了Buffer的概念,但是底层仍然是TCP 相关的RecvQ和SendQ。使用Selector来监控缓存状态,不受RecvQ和SendQ之间的沟通影响。
Read(Buffer): 如果出现RecvQ读完了,那么就会结束本次Read事件,等待下一次selector来通知。
Write(Buffer):如果SendQ满了,那么结束本次Write事件,等待下一次selector通知
2. BIO;NIO都是同步的
通俗来说:所谓同步就是方法调用后返回的那一刻就是该方法结束的时刻。异步就是方法调用以后返回了值但方法并没有结束。
3. NIO中如果RecvQ不能一次接收完数据会怎样?
猜测:结束本次Read/Write事件