我是靠谱客的博主 背后大炮,最近开发中收集的这篇文章主要介绍selector的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

       

     对于nio这块最近几年一直就有关注,知道非阻塞,线程池,缓冲池,io的模式select,poll,epoll,甚至epoll中的et,lt.

但是最近才有时间实际看了看netty的源码,才发现原来selector可以启用这么多,在我的印象中觉得一个服务其实一个selector就够用了,并且本身对于selector的理解也不是很深,今天就大说说自己的认识吧.

     jvm把操作系统的很多特性都封装了起来,理解起来就比较困难,selector我的理解就是一个句柄,更像是一颗树,应用层把要做的事情绑定到这个树上面,对应的事情发生变化时,操作系统的底层会改变状态,然后通过java的select的方法不断的循环,就可以获取发生变化的连接.其实这块可以不限于网络方面,libevent的管道模型也是通过selector进行通知的.

   这样比如在在网络绑定完地址后,就可以把当前的serversocket绑定到selector上面,当有新的连接过来,会改变serversocket的状态,select就可以获取出连接的socket,然后把socket就要读数据,就把socket在绑定到selector上面并且对这个网络的读感兴趣.写也类似,这样就完成了网络的消息通信.

  在netty中,分为了boss和worker(我看的版本比较低3.多的)boss只会绑定有连接的selecotr,而把数据的读写都绑定到别的selector上面,这样可以充分发挥多核的优势.每个boss或worker线程都会有自己的selector,并且对linux的epollcpu 利用问题做了处理.

 

转载于:https://www.cnblogs.com/tianc/p/4173493.html

最后

以上就是背后大炮为你收集整理的selector的理解的全部内容,希望文章能够帮你解决selector的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部