严格模式与混杂模式如何区分_Netty如何支持Reactor模式?

  点击上方“JavaEdge”,关注公众号

设为“星标”,好文章不错过!
BIONIOAIO
Thread-Per-ConnectionReactorProactor
b46c563d8086f4a775442006f23ded5b.png

什么是Reactor

fc800c99d28057ca59191961b460ce84.png

Reactor是一种开发模式,模式的核心流程:
注册感兴趣的事件->扫描是否有感兴趣的事件发生->事件发生后做出相应的处理。

b46c563d8086f4a775442006f23ded5b.png

三种版本

fc800c99d28057ca59191961b460ce84.png

Thread-Per-Connection模式110893a1e0e6e77d50ea3f13b2925815.png

注意到每个 handler 里的 read 和 send都是阻塞操作,那用线程池不就行了?但那只是避免了线程数量无限增长而已,依旧无法避免等待线程的阻塞。b81f84ed17e8e4783cf19f61ecd7a844.png

Reactor 模式 V1:单线程,一个线程太累啦,而且他一旦挂了,整个系统挂了。相当于创业初期,老板就是个全干工程师。55b404a362bff5e22adf21fda187102f.png

Reactor 模式 V2:多线程,老板开始招合伙人了,大家一起干!4c485a754203484d795e869b03b03adc.png

Reactor 模式 V3:主从多线程。对于服务器来说,最重要的莫过于接收连接,使用主线程做这些事。老板真的成为资本家了,开始招聘打工人啦!老板只负责最关键的事情即可。007d229707e6277dae01ebef460c4b72.png

在 netty 中使用 reactor 模式

# Reactor单线程模式EventLoopGroup eventGroup = new NioEventLoopGroup(1);ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(eventGroup);# 非主从Reactor多线程模式EventLoopGroup eventGroup = new NioEventLoopGroup();ServerBootstrap serverBootstrap = new ServerBootstrap();I serverBootstrap.group eventGroup);# 主从Reactor多线程模式EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group( bossGroup, workerGroup);
b46c563d8086f4a775442006f23ded5b.png

源码解析

fc800c99d28057ca59191961b460ce84.png

跨平台实现的根本

    public static SelectorProvider provider() {synchronized (lock) {if (provider != null)return provider;return AccessController.doPrivileged(new PrivilegedAction<SelectorProvider>() {public SelectorProvider run() {if (loadProviderFromProperty())return provider;if (loadProviderAsService())return provider;
provider = sun.nio.ch.DefaultSelectorProvider.create();return provider;}});}}

aada5709d981fb4b6bfb9bf9a578ac0a.png

往期推荐

大厂如何解决数值精度/舍入/溢出问题

大厂数据库事务实践-事务生效就能保证正确回滚?

线上问题事迹(一)数据库事务居然都没生效?

硬核干货:HTTP超时、重复请求必见坑点及解决方案

给大忙人们看的Java NIO教程之Channel

93b630ae9dc5c8c48c67e03fbd466f74.gif

目前交流群已有 800+人,旨在促进技术交流,可关注公众号添加笔者微信邀请进群

f7eaca02890f1f1f762c1fb1581a5cbd.png

喜欢文章,点个“在看、点赞、分享”素质三连支持一下~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值