当前位置: 首页 > article >正文

netty学习

netty是一个 NIO 框架,它提供了一个高性能、异步事件驱动的网络应用程序框架

NIO
三大主键
channel&buffer  通道/缓冲 ?有哪些
selector   选择器  (适合连接多,流量低)多路复用  单线程配合selector管理多个channel

适合
多线程设计适合 少连接
线程池适合 短连接( 没有处理完就堵塞)

selector管理多个channel

FileChannel

byteBuffer 指针/limit/容量
byteBuffer默认写模式   
flip读模式      clear写  compact压缩指针

粘包:多条数据同时发送                                                                                                                  半包  :因为空间限制 只发送了一半
零拷贝 channelTransterTo    不用将数据拷贝到java中 jvm,适合小文件, 
遍历 fileWalkfileTree   访问者模式                                                                                                           

阻塞
非阻塞 自旋耗cpu
seletor 解决自旋

seletor监听的事件
accept
connect
read
write

netty

组件
eventLoop(事件循环)
单线程执行器 处理channel上的IO事件
eventLoopGroup组   处理IO事件 普通任务 定时任务    默认cpu核心X2

channel通道
pipeline(流水线)添加处理方法 handler
write写入(不是马上刷出 要调用flush)
writeAndFlush写入刷出
ChannelFuture是Netty中的一个接口,它表示一个异步操作的结果。ChannelFuture可以用于监听异步操作的结果,并在结果完成时进行处理。closeFuture关闭

future和promise    jdkfuturenettyfuture《promise   
jdkfuture:
get()阻塞等待

nettyfuture:可以同步和异步得到结果
getnow 等待结果非阻塞 没有就null
sync阻塞等待结束 失败抛异常
await 阻塞等待结束 失败不抛异常 要用isSuccess判断是否成功
cause获取失败信息 阻塞
addlinstenee 异步获取结果

promise   :两个容器间传递结果
setSuccess设置成功
setfailure 设置失败

channel的handler和pipeline  元素和容器 
handler处理入站和出站  
 

byteBuf (netty) 区别红
是基于内存的(默认)读写高,不消耗GC 创建和销毁大     可以切换  堆内存
提供了更多的操作方法,比如读取、写入、复制、转换等 
扩容(容量 ,最大容量之间)
池化(默认开启)4.1版本以后
组成 指针(读写),limti ,容量 ,最大容量
写入(各种类型 boolean(01),int (大小),long 等)
对应的读取   读写分离
回收(引用计数(初始1) 调用+1或者-1  等于0就被回收)
头尾释放提高内存使用率
零拷贝

byteBuffer(NIO)
是堆内存的  收到GC影响
读取、写入
组成 指针,limti ,容量
 

netty零拷贝
byteBuf.slice (大的byteBuf切成小的)
切片没有发生复制 原始的不变,不能再写入限制了容量从一个 ByteBuf 复制到另一个 ByteBuf
composite(小的组成大的)切片没有发生复制
 


http://www.kler.cn/news/148081.html

相关文章:

  • git commit message 书写规范
  • Android : Fragment 传递数据 — 简单应用
  • 入门必读:Figma软件的功能和用途一览!
  • ArcGIS中如何建立土地利用规划数据库
  • 2021秋招-数据结构-栈、队列、数组、列表
  • 测开笔记--Typescript: 文件复制到指定目录
  • 什么手机30万?VERTU唐卡手机顶配56.8万
  • PGP 遇上比特币
  • 【LeeCode】209.长度最小的子数组
  • 大数据平台/大数据技术与原理-实验报告--实战HDFS
  • java stream流map和flatmap的区别
  • 小内存服务器生存指南 ——SWAP 虚拟内存
  • 【GCC】2:chatgpt:SendSideBandwidthEstimation
  • 【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
  • springboot实现数据脱敏
  • 排序算法--快速排序
  • 排序算法:归并排序、快速排序、堆排序
  • QTextEdit 是 Qt 框架中的一个类,用于显示和编辑多行文本内容的可编辑部件
  • 本地开启https,配置nodeJs服务
  • 基于C#实现并查集
  • 华为鸿蒙开发(HarmonyOs开发):超详细的:DevEco Studio 的安装和配置 、华为第三方包依赖:SDK软件包的安装、Nodejs的导入配置
  • 漏洞复现--致远 M3 反序列化 mobile_portal RCE
  • 同旺科技 USB 转 RS-485 适配器 -- 隔离型
  • 钉钉直播不了检查防火墙配置没有拦截应用测试直通都放行的,电脑还可以ping通直播域名,就是开始不了直播
  • Docker Swarm总结+Jenkins安装配置与集成(5/5)
  • Spring代理方式之静态、动态代理(JDK和CGlib动态代理)
  • 解决ansible批量加入新IP涉及known_hosts报错的问题
  • Linux学习笔记6-串口应用
  • OpenJudge NOI 1.8 16:矩阵剪刀石头布 c语言
  • SpringBoot趣探究--1.logo是如何打印出来的