BIO、NIO笔记
BIO
B是Blocking,阻塞的意思,所有建立的连接会在内存中一直监听,也就是线程阻塞直到有io请求变化的时候才会继续往下执行
由于每一个连接都占内存,所以连接数是有上限的
NIO
- N是Non-Blocking,不阻塞的意思
- 调用java层面封装的 selector多路复用器
- 名字解释:BIO是遍历每个连接进行检查是否有IO操作,NIO是直接监听就绪事件列表rdlist,将多个监听变为一个监听
- 核心原理是通过调用linux内核的epoll的三个函数做操作(windows是基于winsock2)
- epoll_create 创建监听实例
- epoll_ctl 监听是否有IO操作,若存在则将该IO操作放在就绪事件列表rdlist中
- epoll_wait 线程等待监听就绪事件列表rdlist,一旦存在则处理该IO操作
面试题:
- select、poll、epoll的区别
- select、poll是BIO的模型,select的连接数有上限,poll无上限
- epool是NIO的模型(JDK1.5及以上存在)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SimpleMw's Blog!