【Netty笔记】

使用

Netty是建立在NIO基础之上,Netty在NIO之上又提供了更高层次的抽象。
在Netty里面,Accept连接可以使用单独的线程池去处理,读写操作又是另外的线程池来处理。
Accept连接和读写操作也可以使用同一个线程池来进行处理。而请求处理逻辑既可以使用单独的线程池进行处理,也可以跟放在读写线程一块处理。线程池中的每一个线程都是NIO线程。用户可以根据实际情况进行组装,构造出满足系统需求的高性能并发模型。

为什么选择Netty

如果不用netty,使用原生JDK的话,有如下问题:
1、API复杂
2、对多线程很熟悉:因为NIO涉及到Reactor模式
3、高可用的话:需要出路断连重连、半包读写、失败缓存等问题
4、JDK NIO的bug
而Netty来说,他的api简单、性能高而且社区活跃(dubbo、rocketmq等都使用了它)

Netty连接池优势

Netty提供了两种连接池实现:SimpleChannelPoolFixedChannelPool

  1. SimpleChannelPool

SimpleChannelPool:是最简单的连接池实现,它的工作原理是:当需要获取连接时,如果池中有空闲连接,则直接返回;如果没有空闲连接,则创建一个新连接。当连接使用完毕后,将连接放回池中供后续使用。
优点:
简单易用:SimpleChannelPool的实现非常简洁,易于理解和使用。
灵活性高:SimpleChannelPool可以根据实际需求动态创建和销毁连接,具有较高的灵活性。
缺点:
资源利用率可能较低:由于SimpleChannelPool在需要时会创建新连接,因此可能会导致资源的浪费,特别是在连接创建成本较高的场景下。
无法限制连接数量:SimpleChannelPool无法限制连接池中的连接数量,可能会导致系统资源耗尽。

  1. FixedChannelPool

FixedChannelPool:FixedChannelPool是一种固定大小的连接池实现,它在初始化时会创建指定数量的连接,并在连接池中维护这些连接。当需要获取连接时,如果池中有空闲连接,则直接返回;如果没有空闲连接,则等待其他连接释放。FixedChannelPool的主要特点是其稳定性和可预测性,它适用于连接创建和销毁成本较高、且对系统资源有严格限制的场景。
优点:
资源利用率高:FixedChannelPool在初始化时会创建指定数量的连接,避免了频繁创建和销毁连接带来的性能损耗。
可预测性强:FixedChannelPool的连接数量是固定的,方便开发者对系统资源进行管理和规划。
缺点:
可能导致资源浪费:如果连接池中的连接数量设置过大,而实际需求较小,则会造成资源的浪费。
无法应对突发流量:FixedChannelPool无法动态调整连接数量,因此在突发流量下可能会出现连接不足的情况。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值