简介
BIO Blocking IO 阻塞IO
简单来说, 就是服务器对每一个接收数据请求, 开启一个线程进行对于数据和逻辑的处理, 但是能创建的线程数量有限. 很多处理逻辑开启的线程处于阻塞状态.
NIO Non-blocking IO 非阻塞 IO jdk1.4
简单来说, 服务器对于每一个接受数据的请求, 就是多路复用器,可以监听来自多个客户端的IO事件(简单来说就是异步非阻塞, 通过时间通知). 一个线程中就可以做到, 为每一个连接请求, 建立一个通道.
Selector 用来监听 Channel 的事件.
参考链接
https://blog.csdn.net/nangeali/article/details/82596887 (图画的好)
https://www.cnblogs.com/zedosu/p/6666984.html (逻辑清晰)
如何理解同步阻塞, 同步非阻塞和异步非阻塞
同步阻塞 : 小时候看着水开
同步非阻塞 : 可以干自己的事儿, 但是过一会儿就来查询一下.
异步非阻塞: 干自己的事儿, 水开了会开启事件通知你.
IO 和 NIO
IO 是面向流的操作, NIO 是面向缓冲区的操作.
AIO 还没掌握
不过是 JDK7 引入的.
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》