Netty使用和常用组件辨析

Netty使用和常用组件辨析

Netty的线程模型

  • Netty通过Reactor模型基于多路复用器接收并处理用户请求,内部主要实现了两个线程池
    • boss线程池
      • 负责处理请求的接收工作,当收到请求时,会把对应的socket封装成一个NioSocketChannel,并交给work线程池处理
    • work线程池
      • 负责处理请求的读写操作,然后交给对应的Handler处理
  • Reactor模型有三种
    • 单线程模式
      • 一个线程负责多个事件处理,当连接数过多时会造成性能瓶颈,适用于连接数较少、复杂度较低的场景
    • 多线程模式(单线程、工作线程池)
      • 在单线程Reactor模式的基础上,将业务处理部分交给了线程池,提升并发能力,但是要注意线程安全
    • 主从多线程模式
      • 将整体拆分为主、从Reactor,主Reactor负责监听连接事件,将事件分发给从Reactor去处理,从Reactor负责与客户端读写操作,充分利用多核CPU,提升并发能力

TCP粘包/拆包

  • TCP是以流的方式来处理数据,一个完整的包可能会被TCP拆分成多个包进行发送,也可能把小的封装成一个大的数据包发送
  • 粘包/拆包的原因
    • 用户写入的数据大小 大于 发送到缓冲区的大小,会发生拆包的现象(一个放不下)
    • 用户写入的数据大小 小于 发送到缓冲区的大小,会发生粘包(多个合并到一起)
  • 解决粘包/拆包的方法
    • 消息定长
    • 用特殊字符进行分割

Netty的重要组件

  • Channel
    • 主要负责网络操作,比如连接、IO读写等
  • EventLoop
    • 配合Channel处理I/O操作
  • ChannelFuture
    • 通过ChannelFuture注册监听事件,对于执行结果自动触发返回结果
  • ChannelHandler
    • 处理各种事件,比如连接、异常、数据处理等
  • ChannelPipeline
    • Channel创建时会分配专属的ChannelPipeline进行关联,相当于放到了容器内

Netty的零拷贝实现

  • 在网络通信上,接收和发送数据通过直接内存进行操作
  • 在缓存操作上,通过合并多个缓冲数据,避免重复拷贝
  • 在文件传输上,直接通过文件缓冲数据传输到管道,避免拷贝
  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫吹过的柚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值