NIO笔记

作者: 兮兮码字的地方 | 来源:发表于2021-10-07 17:15 被阅读0次

    1.基于select的NIO

    (jdk1.4版本)

    socketChannel被while(true)轮训处理,socketChannel可能没有读写时间发生,但每次都会便利处理所有socketChannel,存在大量空循环,耗费性能。

    2.基于selector(epoll)的NIO

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

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

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

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

    相关文章

      网友评论

          本文标题:NIO笔记

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