• Netty源码剖析-关闭服务


    参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code!

    ----主线:

     

     ----源码:

      先在服务端加个断点和修改下代码:如图:

     然后启动server和client;然后跳过bossGroup到workerGroup;进入workerGroup的关闭:在此之前呢,先在NioEventLoop里面的关闭处打个断点:

    然后跟进来看看closeAll();

     这里selectAgain();目的是为了去除canceled的key,接下来的key都是有效的key了。完成之后接着回去

     进入到confirmShutdown();

      

     这里会run Task和hook;挨个执行则返回:

    ----总结:

        ①关闭服务本质:

          关闭所有连接及Selector:

        java.nio.channels.Selector#keys

          java.nio.channels.spi.AbstractInterruptibleChannel#close

          java.nio.channels.SelectionKey#cancel

        selector.close();

        关闭所有线程:退出循环体for(;;).

        ②关闭服务要点:

          优雅(DEFAULT_ SHUTDOWN_ _QUIET_ PERIOD )

          可控(DEFAULT_ SHUTDOWN_ _TIMEOUT)

          先不接活,后尽量干完手头的活(先关boss后关worker: 不是100%保证)

    我只想做的更好,仅此而已。

  • 相关阅读:
    var 和 let 的区别
    js初步认识变量
    弹性布局
    盒模型
    多重样式优先级深入概念
    层叠机制--比较特殊性
    anroid抓包工具tcpdump的用法
    linux find grep组合使用
    Protect Broadcast 保护广播
    android:exported 属性详解
  • 原文地址:https://www.cnblogs.com/-qilin/p/11821896.html
Copyright © 2020-2023  润新知