20190829_netty底层架构总结

  1. 一个EventLoopGroup当中包含多个EventLoop.
  2. 一个EventLoop在它的生命周期当中只有唯一一个Thread进行绑定。
  3. 启用EventLoop所处理的各种I/O事件都将在它所关联的那个Thread上进行处理。
  4. 一个Channel在它的生命周期当中只会注册在一个EventLoop上。
  5. 一个EventLoop在运行过程中,会被分配给一个或多个channel.

在Netty中,Channel的使用一定是线程安全的,基于此我们可以存储一个channel的引用,并且需要要向远程端点发送数据时,通过这个引用来调用channel相应的方法,即便当时有很多线程在使用也不会出现多线程问题;而且,消息一定会按顺序发送出去

我们在业务开发中,不要将长时间的耗时任务放在EventLoop的执行队列,因为它会将一直阻塞该线程池所对应的有channel上的其他执行任务,如果我们需要进行阻塞或者耗时的操作,那么就需用使用一个专门的EventExecutor。

通常会有两种使用方式:

  1. 在channelHandler的回调方法中,使用自己定义的业务线程池,这样就可以实现异步调用。
  2. 借助Netty提供的ChannelPipline添加的channelHandler时调用的addLast方法传递EventExecutor.

在netty中有两种发消息的方式,第一种是可以直接写到channel中,或者可以写到channelHandler所关联的ChannleHandlerContext中,对于前一种方式,消息会从channelPipline的末尾开始流动,而对于后一种方式,消息会从ChannelPipline的下一个ChannelHandler开始流动。

结论:

  1. ChannelHandlerContext与ChannelHandler之间的绑定关系是永远不会改变的,因此对其缓存是没有任何问题的。

  2. 对于与Channel同名方法来说,ChannelHandlerContext的方法会产生更短的事件流,我们可以提升性能。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值