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(小的组成大的)切片没有发生复制
 

你可能感兴趣的:(netty)