NIO笔记

作者: 兮兮码字的地方 | 来源:发表于2021-02-21 18:41 被阅读0次

BIO

阻塞型IO,处理单个连接的数据时会阻塞程序,(读不到数据就一直阻塞),如果放在线程池中处理,也会存在高并发问题,大量并发创建大量线程池,内存占用太大。

1.基于select的NIO(传统NIO)

(jdk1.4版本)

socketChannel被while(true)轮训处理,(读不到数据也不会阻塞),socketChannel可能没有读写事件发生,但每次都会便利处理所有socketChannel,存在大量空循环,耗费性能。

2.基于selector(epoll)的NIO

selector最底层其实是依靠操作系统用c语言实现的epoll。

socketChannel被注册到selector(epoll内部维护了两个集合,一个集合用来存放socketChannel,和一个集合用来存放就绪事件列表)中,监听连接、读、写等事件。

然后循环调用selector.select()方法,该方法是一个阻塞方法,底层就是调用到epoll的监听方法,真正执行监听,只有selector监听到连接、读、写事件,也就是就绪事件集合不为空时,才会继续往下执行。

然后循环处理发生了有效事件的socketChannel,也就是处理就绪事件集合,完成业务逻辑。

Netty

本质是对NIO的封装。通过两个线程池提升处理性能。基于事件的响应式编程。

相关文章

网友评论

      本文标题:NIO笔记

      本文链接:https://www.haomeiwen.com/subject/hqwqfltx.html