我们介绍了三种Reactor 的线程模型, 那么它们和NioEventLoopGroup 又有什么关系呢? 其实, 不同的设置NioEventLoopGroup 的方式就对应了不同的Reactor 的线程模型。

1、单线程模型,来看下面的应用代码:

EventLoopGroup bossGroup = new NioEventLoopGroup(1);
ServerBootstrap server = new ServerBootstrap();
server.group(bossGroup);

注意,我们实例化了一个NioEventLoopGroup,然后接着我们调用server.group(bossGroup)设置了服务器端的EventLoopGroup。有人可能会有疑惑;我记得在启动服务器端的Netty 程序时, 需要设置bossGroup 和workerGroup,为何这里只设置一个bossGroup?其实原因很简单,ServerBootstrap 重写了group 方法:

public ServerBootstrap group(EventLoopGroup group) {return group(group, group);
}

因此当传入一个group 时,那么bossGroup 和workerGroup 就是同一个NioEventLoopGroup 了。这时,因为bossGroup 和workerGroup 就是同一个NioEventLoopGroup,并且这个NioEventLoopGroup 线程池数量只设置了1个线程,也就是说Netty 中的Acceptor 和后续的所有客户端连接的IO 操作都是在一个线程中处理的。那么对应到Reactor 的线程模型中,我们这样设置NioEventLoopGroup 时,就相当于Reactor 的单线程模型。

2、多线程模型,再来看下面的应用代码:

EventLoopGroup bossGroup = new NioEventLoopGroup(128);
ServerBootstrap server = new ServerBootstrap();
server.group(bossGroup);

从上面代码中可以看出,我们只需要将bossGroup 的参数就设置为大于1 的数,其实就是Reactor 多线程模型。

3、主从线程模型,到这里相信大家都已经想到了, 实现主从线程模型的代码如下:

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup);

bossGroup 为主线程,而workerGroup 中的线程是CPU 核心数乘以2,因此对应的到Reactor 线程模型中,我们知道, 这样设置的NioEventLoopGroup 其实就是Reactor 主从多线程模型。

EventLoopGroup 与Reactor 关联相关推荐

  1. EventLoopGroup 与Reactor

    一个Netty 程序启动时,至少要指定一个EventLoopGroup(如果使用到的是NIO,通常是指NioEventLoopGroup),那么,这个NioEventLoopGroup 在Netty ...

  2. JavaEE知识体系

    1 1.文件上传下载 1.1 文件上传 1.1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.1.2 文件上传对页面的要求 1.必须 ...

  3. Reactor模型和Proactor模型:同步IO与异步IO

    Table of Contents 服务端的线程模型 2种fd 3种事件 Reactor模型-同步I/O 1.单Reactor单线程模型 2.单Reactor多线程模型 3.主从Reactor多线程模 ...

  4. [Netty] Selector选择器以及Reactor实现 (七)

    文章目录 1.Nio中的Selector介绍 1.1 Selector 1.2 SelectionKey 1.3 ServerSocketChannel 1.4 SocketChannel 2.Net ...

  5. 彻底搞懂Reactor模型和Proactor模型

    在高性能的I/O设计中,有两个著名的模型:Reactor模型和Proactor模型,其中Reactor模型用于同步I/O,而Proactor模型运用于异步I/O操作. 服务端的线程模型 无论是Reac ...

  6. Reactor模式与Proactor模式

    博主一脚刚踏进分布式的大门(看<分布式Java应用>,如果大家有啥推荐的书欢迎留言~),发现书中对NIO采用的Reactor模式.AIO采用的Proactor模式一笔带过,好奇心趋势我找了 ...

  7. reactor与proactor模式

    首先来看看Reactor模式,Reactor模式应用于同步I/O的场景.我们以读操作为例来看看Reactor中的具体步骤: 读取操作: 1. 应用程序注册读就需事件和相关联的事件处理器 2. 事件分离 ...

  8. 八个层面比较 Java 8, RxJava, Reactor

    前言 这是一篇译文,原文出处(http://alexsderkach.io/comparing-java-8-rxjava-reactor/).其实很久以前我就看完了这篇文章,只不过个人对响应式编程研 ...

  9. (19)Reactor Processors——响应式Spring的道法术器

    本系列文章索引<响应式Spring的道法术器> 前情提要 响应式流 | Reactor 3快速上手 | 响应式流规范 2.9 Processor Processor既是一种特别的发布者(P ...

最新文章

  1. 百余位中外学者探讨神经科技挑战:伦理担忧与监管难题并存
  2. rpmbuile 制作drbd RPM包
  3. spark集群详细搭建过程及遇到的问题解决(三)
  4. WordPress Mail Subscribe List插件‘sml_name’参数HTML注入漏洞
  5. 【渝粤教育】国家开放大学2018年春季 3818-22T燃气工程施工 参考试题
  6. java的if里有多个if_代码里写很多if会影响效率吗?
  7. Android菜单详解(三)——SubMenu和IconMenu
  8. python变量类型之间转换_Python常用数据类型之间的转换总结
  9. 有哪些闷声发大财的行业?
  10. App性能测试-GT
  11. Reboot运维开发Python-03
  12. ssfn授权_Steam盗号木马窃取授权文件,360安全大脑强力拦截
  13. 【MOOC-生物信息学-蛋白质结构预测与分析】(占坑)
  14. 商城GW-SHOP,基于 微信小程序 + springboot + vue 技术构建
  15. 魅族16xs可升级Android10吗,手机评测 篇十一:用了魅族16Xs半个月,谈谈我的使用感受...
  16. 分享灵动微MM32F3270微控制器的音频类产品参考方案
  17. android 描点抠图源码,一款功能强大的AI驱动一键安卓抠图软件,人物商品图章签名logo...
  18. 0805,1206等封装尺寸
  19. word刷子刷格式_用word格式刷快速调整文档格式-word技巧-电脑技巧收藏家
  20. centOS7 清理系统垃圾

热门文章

  1. 在 iOS 或者 Mac OS X 中将 NSDictionary 映射为本地对象的方法
  2. .NET:如何声明某个程序需要管理员权限
  3. kong 使用jwt RSA256证书
  4. Linux-安装FFmpeg
  5. [Mysql]备份同库中一张表的历史记录 insert into ..select
  6. i2c--insmod
  7. el表达式大小写问题的坑坑坑坑坑坑坑坑!!!
  8. 大话设计模式—中介者模式
  9. 【centos7】添加开机启动服务/脚本
  10. Python开发【第一篇】:初识Python