对于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 利用问题做了处理.

最新文章

  1. Mybatis框架 的快速入门
  2. Apache开发模块
  3. leetcode 136. Single Number ----- java
  4. 菜鸟学sql,Oracle数据库结构比较
  5. 5059 一起去打CS
  6. sql 锁相关(转)
  7. HotelIInventory项目小结
  8. windows phone 7 通过麦克风录音,并且播放
  9. 踩坑实录 Android studio中关于 No cached version of **** available for of处理办法
  10. 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
  11. AndFix
  12. awk 循环语句例子
  13. 为什么要使用“var me=this”这样的写法
  14. docker 1 为什么要使用docker
  15. MySql cmd下的学习笔记 —— 有关select的操作(order by,limit)
  16. 查看文件内容 cat , tac
  17. 【iCore4 双核心板_ARM】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
  18. QT中文乱码与国际化支持
  19. Vertica示例数据库安装
  20. java的代理(编程思想)

热门文章

  1. MHA手动切换 原创1(主故障)
  2. form表单中method的get和post区别
  3. Eclipse插件的安装方法
  4. MySQL(19):SQL语句(MySQL)大全
  5. android源码编译常见错误
  6. python(1) - 字符串
  7. jboss使用(eap 6.0以后版本)
  8. Redux你的Angular 2应用--ngRx使用体验
  9. iOS 之美:iOS Delegate 使用五步曲
  10. (转)理解SQL SERVER中的分区表