Netty

场景- 性能要求高的系统
需求- 高性能实现需求
实现- netty
应用- 使用Netty异步非阻塞NIO框架实现

原理:

** 传统RPC调用性能问题**
1 、阻塞IO导致高并发使服务器宕机
2 、JAVA序列化编、解码导致性能问题(序列化跨语言问题)
3、 CPU占用率高

高性能关键
IO模型-数据协议-线程模型-IO模型

一:高性能的理由

1 Netty在NIO基础上的异步非阻塞通信
NioEventLoop聚合了多路复用器Selector(多个IO阻塞、复用到同一个Selector上、实现系统在单线程情况下,可处理多线程,已实现减少系统开销),可同时并发处理成百上千个客户端channel,切读写操作都是非阻塞,可充分提高IO线程的运行效率,避免IO阻塞导致线程挂起。

2 零拷贝
1 接受和发送ByteBuffer都使用堆外直接内存进行socket读写
2 提供组合buffer对象,可聚合多个buffer
3 transferTo()直接将文件缓冲区的数据发送到Channel

3 内存池

三个维度:
1 Pooled和UnPooled
2 UnSafe和 非UnSafe(底层读写(高性能)与应用程序读写)
3 Heap和Direct(堆内存和堆外内存)

4 高效的Reactor(类似线程池、具有调度作用)线程模型

1 Reactor单线程模型
2 Reactor多线程模型,一个线程接受所有连接,然后放入线程池中(接收到连接后,由Reactor在一个线程池(包含任务队列和N个可用线程)中分配一个线程,负责IO读写,编解码,发送等)
在这里插入图片描述
如果接收线程还有很多逻辑处理,比如需要安全认证等、太消耗性能,这样单线程接受,容易出问题。可使用下面的模型
3 主从Reactor多线程模型
Reactor主线程具体派发线程去处理不同逻辑
在这里插入图片描述

5 无锁化的串行设计理念
在这里插入图片描述
pipeline 责任链模式-双向链表 Inbound Outbound

6 高效的并发编程
Netty的高效并发编程主要体现:
1 volatile的大量、正确应用
2 CAS和原子类的广泛使用
3 线程安全容器的使用
4 通过读写锁提高并发性能

7 高性能的序列化框架介入
影响序列化性能因素关键
1 序列化后的码流大小(网络带宽占用)
2 序列化&反序列化的性能(CPU资源占用)
3 是否支持跨语言(异构系统的对接和发开语言的切换)

8 灵活的TCP参数配置能力在这里插入图片描述

二 源码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值