您当前的位置: 首页 > 

Netty的Reactor模式

发布时间:2020-12-10 22:47:32 ,浏览量:0

BIO NIO AIO Thread-Per-Connection Reactor Proactor 什么是Reactor

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

client/Server SocketChannel/ServerSocketChannel OP_ACCEPT OP_CONNECT OP_WRITE OP_READ client SocketChannel Y Y Y client ServerSocketChannel Y client SocketChannel Y Y 三种版本 Thread-Per-Connection模式

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

  • Reactor 模式 V1:单线程,一个线程太累啦,而且他一旦挂了,整个系统挂了。相当于创业初期,老板就是个全干工程师。
  • Reactor 模式 V2:多线程,老板开始招合伙人了,大家一起干!
  • Reactor 模式 V3:主从多线程。对于服务器来说,最重要的莫过于接收连接,使用主线程做这些事。老板真的成为资本家了,开始招聘打工人啦!老板只负责最关键的事情即可。
在 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); 
源码解析

跨平台实现的根本

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; } }); } } 

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0435s