当前位置: 首页 > 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/a/148081.html

相关文章:

  • Mysql篇-三大日志
  • WebLogic 介绍
  • 修改数据库和表的字符集
  • NVR录像机汇聚管理EasyNVR多品牌NVR管理工具/设备:大华IPC摄像头局域网访问异常解决办法
  • Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程
  • C++编程技巧与规范-类和对象
  • 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#实现并查集