不惑之年的硬件牛人转到软件自学之netty框架(四)EventLoop线程模型和引导

由于近期开发一个中型的物联项目,带着十来个兄弟从底层硬件到无线局域通信到通用网关到netty高可用框架到spring cloud的后台开发到移动端APP开发到WEB前端的开发整体框架的搭建,虽然很辛苦,但我一直在给兄弟们说我们要三年内在物联行业占有一席之地,期待项目的成功。就因为这样,我写出了这个netty自学框架,虽然也是开始学习,我想通过项目的历练肯定对大家都有用,加油!

      今天是:2018年5月31日          主题:EventLoop和线程模型

      一、什么是线程模型

      线程模型指定了操作系统、编程语言、框架或者应用程序的上下文中的线程管理的关键方面。

     二、EventLoop的执行逻辑

     

    三、EventLoop/线程的分配

    1、异步传输

         异步传输实现只使用了少量的EventLoop(以及和它们相关联的Thread),而且在当前的线程模型中,他们可能会被多个Channel所共享。这使得可以通过尽可能少量的Thread来支撑大量的Channel,而不是每个Channel分配一个Thread。

       

       一旦一个Channel被分配给一个EventLoop,它将在它的整个生命周期中都使用这个EventLoop(以及相关联的Thread)。

      2、阻塞传输

          用于想OIO(就得阻塞I/O)这样的其他传输的设计略有不同。这里每一个Channel都将被分配给一个EventLoop(以及它的Thread)。如果你开发的应用程序使用过java.io包中的阻塞I/O实现,你可能就遇到过这种模型。

                    

      四、引导:在深入学习了ChannelPipeline、ChannelHandler和EventLoop之后,我们如何将这些部分组织起来呢?这个就是用“引导”。简单来说,引导一个应用程序就是对它进行配置,并使它运行起来的过程。

     1、引导类的层次结构包括一个抽象的父类和两个具体的引导子类,如下图:

         

      相对于将具体的引导类分别看作用于服务器和客户端的引导来说,服务器致力于使用一个父Channel来接受来自客户端的连接,并创建子Channel以用于它们之间的通信;而客户端将最可能只需要一个单独的、没有父Channel的Channel来用于所有的网络交互。两种应用程序类型之间通用的引导步骤由AbstractBootstrap处理,而特定于客户端或者服务器的引导步骤则分别由Bootstrap或ServerBootstrap处理。

      2、引导客户端和无连接协议

        Bootstrap类被用于客户端或者使用了无连接协议的应用程序中。其Bootstrap类的API如下:

        

        

         引导客户端的引导过程如下:

          

       3、引导客户端的代码:

            

            

         4、引导服务器ServerBootstrap类的方法

           

          引导客户端的引导过程如下:

       

          5、引导服务器代码:

              

        五、关闭

        你需要关闭EventLoopGroup,它将处理任何挂起的事件和任务,并且随后释放所有活动的线程。这就是调用EventLoopGroup.shutdownGracefully()方法的作用。需要注意的是,shutdownGracefully()方法也是一个异步的操作,

        

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值