掃描是否有感興趣的事件發(fā)生->..." />
<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Netty如何支持Reactor模式?

          共 1995字,需瀏覽 4分鐘

           ·

          2020-12-14 09:38


          ? 點(diǎn)擊上方“JavaEdge”,關(guān)注公眾號(hào)

          設(shè)為“星標(biāo)”,好文章不錯(cuò)過(guò)!

          BIONIOAIO
          Thread-Per-ConnectionReactorProactor

          什么是Reactor


          Reactor是一種開發(fā)模式,模式的核心流程:
          注冊(cè)感興趣的事件->掃描是否有感興趣的事件發(fā)生->事件發(fā)生后做出相應(yīng)的處理。


          三種版本


          Thread-Per-Connection模式

          注意到每個(gè) handler 里的 read 和 send都是阻塞操作,那用線程池不就行了?但那只是避免了線程數(shù)量無(wú)限增長(zhǎng)而已,依舊無(wú)法避免等待線程的阻塞。

          Reactor 模式 V1:?jiǎn)尉€程,一個(gè)線程太累啦,而且他一旦掛了,整個(gè)系統(tǒng)掛了。相當(dāng)于創(chuàng)業(yè)初期,老板就是個(gè)全干工程師。

          Reactor 模式 V2:多線程,老板開始招合伙人了,大家一起干!

          Reactor 模式 V3:主從多線程。對(duì)于服務(wù)器來(lái)說(shuō),最重要的莫過(guò)于接收連接,使用主線程做這些事。老板真的成為資本家了,開始招聘打工人啦!老板只負(fù)責(zé)最關(guān)鍵的事情即可。

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


          源碼解析


          跨平臺(tái)實(shí)現(xiàn)的根本

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



          往期推薦


          大廠如何解決數(shù)值精度/舍入/溢出問(wèn)題

          大廠數(shù)據(jù)庫(kù)事務(wù)實(shí)踐-事務(wù)生效就能保證正確回滾?

          線上問(wèn)題事跡(一)數(shù)據(jù)庫(kù)事務(wù)居然都沒(méi)生效?

          硬核干貨:HTTP超時(shí)、重復(fù)請(qǐng)求必見坑點(diǎn)及解決方案

          給大忙人們看的Java NIO教程之Channel





          目前交流群已有?800+人,旨在促進(jìn)技術(shù)交流,可關(guān)注公眾號(hào)添加筆者微信邀請(qǐng)進(jìn)群


          喜歡文章,點(diǎn)個(gè)“在看、點(diǎn)贊、分享”素質(zhì)三連支持一下~

          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  韩国无码一区二区三区精品 | 大香蕉免费成人网 | 人妻免费在线视频 | 欧美精品久久久 | 免费观看黄色片网站 |